Makine öğrenmesi - tarih / saat verilerinden mühendislik özellikleri


45

Makine öğrenimi uygulaması için zaman verilerini ele almak için kullanılan ortak / en iyi uygulamalar nelerdir?

Örneğin, veri setinde "2014-05-05" gibi olay zaman damgasına sahip bir sütun varsa, varsa bu sütundan yararlı özellikleri nasıl çıkarabilirsiniz?

Şimdiden teşekkürler!

Yanıtlar:


44

Zaman değişkeni ile diğer değişkenleri karşılaştırarak ve trendleri araştırarak başlardım.

Örneğin

görüntü tanımını buraya girin

Bu durumda periyodik bir haftalık trend ve uzun vadeli bir artış eğilimi vardır. Böylece iki zaman değişkenini kodlamak istersiniz:

  • day_of_week
  • absolute_time

Genel olarak

Trendlerin üzerinde gerçekleştiği birkaç ortak zaman çerçevesi vardır:

  • absolute_time
  • day_of_year
  • day_of_week
  • month_of_year
  • hour_of_day
  • minute_of_hour

Tüm bunlardaki eğilimleri araştırın.

Garip trendler

Garip eğilimler için de bak. Örneğin, nadir fakat kalıcı, zamana dayalı trendleri görebilirsiniz:

  • is_easter
  • is_superbowl
  • is_national_emergency
  • etc.

Bunlar genellikle, verilerinizi olayları zamanla eşleştiren bazı harici kaynaklara karşı çapraz referanslandırmanızı gerektirir.

Neden grafik?

Grafik çizmenin çok önemli olduğunu düşündüğüm iki sebep var.

  • Garip trendler
    Genel trendler oldukça kolay bir şekilde otomatikleştirilebilse de (sadece her seferinde ekleyin), garip trendler genellikle bir insan gözü ve dünyayı bulmak için bilgi ister. Bu grafik çizmenin çok önemli olmasının bir nedeni.

  • Veri hataları
    Çok sık sık verinin içinde ciddi hatalar var. Örneğin, tarihlerin iki biçimde kodlandığını ve bunlardan sadece birinin programınıza doğru yüklendiğini görebilirsiniz. Bu tür sorunların sayısız vardır ve şaşırtıcı derecede yaygındır. Grafiğin sadece zaman serileri için değil, veriler için de önemli olduğunu düşünüyorum.


7

Verileri pencerelere ayırın ve otomatik korelasyon katsayıları, dalgacıklar, vb. Bu pencerelerin özelliklerini bulun ve öğrenmek için bu özellikleri kullanın.

Örneğin, sıcaklık ve basınç verileriniz varsa, ayrı ayrı parametrelere ayırın ve o pencerede ve diğerlerinde yerel minima sayısı gibi özellikleri hesaplayın ve bu özellikleri modeliniz için kullanın.


7

Dikkate alınması gereken bir şey daha, Ben Haley'nin söylediği her şeyin ötesinde, kullanıcının yerel zamana dönüştürülmesidir . Örneğin, tüm kullanıcılar için saat 20:00 civarında meydana gelen bir şeyi tahmin etmeye çalışıyorsanız, UTC saatine bakarsanız, bunu tahmin etmek daha zor olacaktır.


6

Bazı durumlarda, bir zaman serisi içindeki veriler ve olaylar mevsimseldir. Bu gibi durumlarda olayın ayı ve yılı çok önemlidir. Dolayısıyla, bu tür senaryolarda, olayın belirli bir ay / yıl boyunca olup olmadığını göstermek için ikili değişkenleri kullanabilirsiniz.

Umarım bu sorunuzu yanıtlar. Nazikçe tam olarak neyi başarmaya çalıştığınız konusunda biraz daha belirgin olmasanız da


4

As Ben ve Nar tarih-saat nesnesi kaçırmak olur - güzel açıkladı (benzersiz da kötüsü genelde ve) tam mevsimsel trendleri tespit yardımcı olacağını tarih ve saat parçalarının kova içine tarih-saat nesnesi parçalayarak

İlgilendiğiniz belirli bir makine öğrenmesi algoritmasından bahsetmediniz, ancak k-aracı gibi mesafeye dayalı kümelemeyle de ilgileniyorsanız , tarih-zaman nesnesini unix-time biçiminde genelleştiririm . . Bu, algoritma için basit bir sayısal mesafe karşılaştırmasına izin verir ve 2 tarih değerinin ne kadar olduğunu gösterir.

Örneğinizde, yalnızca tarih tarihini 2014-05-05 - 1399248000 arasında genelleyeceğim (5 Mayıs 2014, UTC’nin başlangıcını temsil eden unix zamanı).

[Tarih tarihini mümkün olan her tarih-zaman bölümüne yerleştirerek başarabileceğinizi söyleyebilirsiniz .. ama bu veri seti boyutlarınızı önemli ölçüde artıracaktır. Bu nedenle, unix-time'ı, mesafe ölçümü için ve bazı tarih-zaman kovalarını birleştirmeyi öneririm]


3

Ben statik özelliklerden bahsediyor ve zaman damgası özelliklerini kullanıyor.

Bir uzantı olarak, gecikme özelliklerini tanıtacağım , ham zaman serilerinden bahsetmiyorum, fakat bunun üzerinde toplananlar.

En mistik kısım, gelecekteki değerin bizim için görülmemesi, bu toplu özellikleri eğitim verilerinde nasıl kullanabiliriz?

Küçük bir örnek: 1991'den 2015'e kadar yıllık elektrik tüketimi verileri var, gelecekteki 5 yıl, 2016'dan 2020'ye elektrik tüketimini tahmin etmek istiyorum. Son 5 yıldaki elektrik tüketiminin hareketli ortalamasını 2020'nin özellik değerleri olarak hesaplayacağım, ancak 2016'dan 2020'ye kadar bizim için bilinmiyor, bu yüzden 5 yıl boyunca geçen zaman serisinin liderliğini yapıyoruz (2010'un 2015'te hareketli ortalamasını yapalım, sonra bu değeri 2020'nin özellik değerleri olarak kullanalım). Böylece, gelecek 5 yıllık özellik verilerini oluşturabiliriz.

Bir sonraki adım sadece hareketli işlevi kullanmaktır (count \ mean \ median \ min \ max.etc) ve farklı pencereleri deneyin, o zaman birçok özellik inşa edeceksiniz!


2

Tarih / saat bilgisi ile neye ilgi duyduğunuza bağlı olarak, sadece bunu silmek isteyebilirsiniz. Örneğin, bir başlangıç ​​noktasından olan mesafeyle ilgileniyorsanız (örneğin, 1 Ocak 2015) ve ay olarak ölçmek istiyorsanız, 1 ay olarak kodlardım (1-31 Ocak 2015 için), 2 (1 - 28 Şubat 2015), 3, 4, 5, 6, vb. Başlangıç ​​tarihleri ​​arasındaki mesafe yaklaşık olarak aynı olduğundan, bu, basit ve kesintisiz bir biçimde zaman mesafesini temsil eder. Ve ben sürekli diyorum, çünkü 6.5 ayını söyleyebilir ve Haziran 2015'e kadar yarı yolda olduğunu bilirsiniz. O zaman gerçek tarih kodlaması için endişelenmenize gerek yoktur ve tüm tipik sınıflandırma yöntemlerinizi kullanabilirsiniz.

Gün cinsinden ölçüm yapmak istiyorsanız, sınıflandırmadan önce verileri çekmek için MySql 'to_days' işlevine sahip olduğunu biliyorum. Python muhtemelen benzer bir şeye sahiptir veya mork tarafından önerilen unix-time formatını kullanır.

Bu yardımcı olur umarım!


1

Etkilerini görmek için, sonuç değişkenine karşı zamana göre değişkenlik gösteren grafikler çizin. Ay, gün, yılı ayrı özellikler olarak kullanabilir ve ay kategorik bir değişken olduğundan, bir kutu / bıyık arsasını deneyebilir ve herhangi bir örüntü olup olmadığını görebilirsiniz. Sayısal değişkenler için dağılım grafiği kullanabilirsiniz.


1

Bunun ortak / iyi bir uygulama olup olmadığını bilmiyorum, ama konuyla ilgili başka bir bakış açısı.

Diyelim ki bir tarih varsa, her bir alanı "sürekli değişken" yerine "kategori değişkeni" olarak değerlendirebilirsiniz. Gün {1, 2 ..., 31} kümesinde bir değere sahip olacak, ay {1, ..., 12} 'de bir değere sahip olacak ve yıl için minimum ve maksimum bir değer seçeceksin ve bir küme oluşturun.

O zaman, günlerin, ayların ve yılların belirli sayısal değerleri, verilerdeki eğilimleri bulmak için yararlı olamayacağından, sayısal değerleri kodlamak için her birinin bir özelliği olan ikili bir gösterimi kullanın. Örneğin, ay 5 0 0 0 0 1 0 0 0 0 0 0 0(her biri bir özellik olmak üzere 11 konumunda bir 5'inci konumda 1'dir) olur.

Dolayısıyla, örneğin, "yıl setinde" 10 yıl olması, bir tarih 43 özellik vektörüne (= 31 + 12 + 10) dönüştürülür. "Seyrek vektörler" kullanarak, özelliklerin miktarı bir sorun olmamalıdır.

Zaman verileri, haftanın günü, ayın günü için benzer bir şey yapılabilir ...

Hepsi, makine öğrenme modelinizin cevaplamasını istediğiniz soruya bağlıdır.


Bu, muhtemelen ayın 14. ve 15. aylarının 'benzer' olduğu gibi mevcut olan ilişkileri yakalayamıyor. Her günün kelimenin tam anlamıyla farklı olduğuna inandığınız ölçüde, yarınla ​​ilgili tahminin mümkün olmadığına da inanıyorsunuz. Ayrıca, tek bir sıcak kodlama kategorisini zorunlu kılmak zorunda değilsiniz.
Sean Owen

Neden yakın tarihlerin "yakınlığını" yakalayamadığını anlayamıyorum. Örneğin, ikili vektörü bir NN'ye beslerseniz, uygun eğitimden sonra kendisini çözecektir. İkili vektörleri kullanmak, kategorileri temsil etmenin sadece bir yoludur.
Paco Barter

Bu örnekte, girdi alanında, ilgisiz ve "is_1st" ile ilgisiz, vb. Gibi "is_12" ve "is_13th" gibi etkili sütunlara sahip olursunuz. Sürekli bir özellik olarak, 12. ve 13. Bir anlamda, 1 ve 12’den daha yakın. Bir modelin çıkarımına çekici gelebilir ama giriş özelliklerinin kodlamasından bahsediyorum.
Sean Owen

Tamam anladım. Haklısın, sürekli bir özellik, "yakınlık" tarihlerinin kalitesini daha iyi yakalar. Demek istediğim, tarihin sayısal değerlerinin alakasız olduğuna dair verilerde eğilimler olabileceği (örneğin, sadece cumartesi günlerinde belirli bir müşteri satın alma modeli) olabileceğidir. Bu nedenle tarihlerle uğraşmak için başka bir bakış açısı sunar.
Paco Barter

@ PacoBarter'ın söylediği gibi tek sıcak kodlamanın kategoriler arasındaki farklı mesafeyi yok sayar. Çoğu makine öğrenim modelinde faz tipi girişi olmadığından, bu özellikler kendinden faz bilgisi olduğundan bu kolay bir şekilde çözülemez. Bazı mesafe ölçütleri üzerine DIY olabilir.
plpopk

0

Cevabımın İçeriği : Şimdiye kadar çok büyük tepkiler oldu. Ancak, bu belirli zaman serilerinin gelecekteki değerlerini tahmin etmek için bir makine öğrenmesi uygulaması hakkında konuştuğunuzu varsayarak konuşmayı genişletmek istiyorum. Bu bağlamda, tavsiyem aşağıda.

Tavsiye : Öncelikle geleneksel istatistiksel tahmin stratejilerine göz atın (ör. Üstel Düzgünleştirme, SARIMAX veya Dinamik Regresyon) tahmin performansı için temel olarak. Her ne kadar makine öğrenmesi çeşitli uygulamalar için büyük umutlar sunsa da, zaman serileri için, uygulamanız için size daha iyi hizmet edebilecek denenmiş ve doğru istatistiksel yöntemler vardır. Dikkatinizi en son iki makaleye çekerim:

  1. İstatistiksel ve Makine Öğrenimi Tahmini Yöntemleri: Spyros Makridakis ve ark. Makale, birçok zaman serisi için geleneksel istatistiksel zaman serisi analizinin makine öğrenmesi (ML) modellerinden daha iyi performans gösterdiğine işaret etmektedir. Temelde, ML aşırıya kaçma eğilimindedir ve bağımsız girdilerle ilgili herhangi bir ML model varsayımları ihlal edilmiştir.
  2. Basit Versus Kompleks Tahmin: Kesten C Kanıtları Green ve ark. Makale, çeşitli modellerle karşılaştırmalı ve karşılaştırmalı olmayan, eş gözden geçirilmiş dergi makalesi raporlama zaman serisi analizinin zaman serisi çıktısını karşılaştırır ve inceler. Sonuç olarak, araştırmacılar analizlerini yorumlaması daha zor ve performansı daha kötü olan modeller ile karmaşıklaştırmaktadır. Genel olarak, bu zayıf teşvik yapıları nedeniyle oluşur.

İyi performans arıyorsanız, birkaç modele (örneğin MASE gibi) kıyasla karşılaştırmak için bir ölçüm seçin ve birkaç istatistik (aşağıdaki referanslar) ve makine öğrenme modellerini (yukarıda belirtilen özellik geliştirme stratejileriyle birlikte) tarayın.

Alkış,

İstatistiksel Tahmini Öğrenme Kaynakları : Rob J Hyndman'ın ücretsiz ders kitabını burada gözden geçirerek başlayacağım: https://otexts.org/fpp2/ . Metin, analizinize kolayca dahil edebileceğiniz bir R paketine dayanmaktadır: https://otexts.org/fpp2/appendix-using-r.html . Son olarak, lütfen burada açıklanan çapraz kesit çapraz doğrulama ile zaman serisi çapraz doğrulama arasındaki farkın farkında olun: https://robjhyndman.com/hyndsight/tscv/ .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.