İnternette İstediğiniz Gibi Çevrimiçi Para Kazanma!

Python’da ARIMA Modelleriyle Zaman Serisi Tahmini [Part 1] – Yapay zekaya doğru

Şu yazıyı okuyorsunuz: Python’da ARIMA Modelleriyle Zaman Serisi Tahmini [Part 1] – Yapay zekaya doğru

İlk olarak dünyanın önde gelen yapay zeka ve teknoloji haber ve medya şirketi Towards AI’da yayınlandı. Yapay zeka ile ilgili bir ürün veya hizmet yaratıyorsanız sizi yapay zeka destekçisi olmayı düşünmeye davet ediyoruz. Towards AI’da yapay zeka ve teknoloji girişimlerinin ölçeklenmesine yardımcı oluyoruz. Teknolojinizi kitlelere ulaştırmanıza yardımcı olalım.

Python’da ARIMA Modellerini Kullanarak Zaman Serisi Tahmini Yapmaya Yönelik Pratik Bir Kılavuz

Zaman serisi verileri sektördeki en yaygın veri türlerinden biridir ve muhtemelen kariyerinizde bununla çalışacaksınız. Bu nedenle, onunla nasıl çalışılacağını ve analitik ve tahmin tekniklerinin nasıl uygulanacağını anlamak, tüm aday veri bilimcileri için çok önemlidir. Bu makale serisinde, zaman serisi verileriyle çalışmanın temel tekniklerini ele alacağım; verilerinizi anlamak ve daha sonra istatistiksel, makine öğrenimi ve derin teknikleri kullanmak üzere hazırlamak için veri işleme, analiz ve görselleştirmeyle başlayacağım. Tahmin ve sınıflandırma için. Tartışılan ve açıklanan her kavramı gerçek verilere uygulayacağım daha çok pratik bir rehber olacak.

Bu seri 9 makaleden oluşacaktır:

  1. Python Pandas’ta Zaman Serisi Verilerini Değiştirme [A Practical Guide]
  2. Python Pandalarda Zaman Serisi Analizi [A Practical Guide]
  3. Python’da Zaman Serisi Verilerini Görselleştirme [A practical Guide]
  4. Python’da ARIMA Modelleriyle Zaman Serisi Tahmini [Part 1](Buradasınız!)
  5. Python’da ARIMA Modelleriyle Zaman Serisi Tahmini [Part 2]
  6. Zaman serisi verileri için makine öğrenimi [A practical Guide]
  7. Zaman serisi verileri için derin öğrenme [A practical Guide]
  8. İstatistiksel analiz, makine öğrenmesi ve derin öğrenmeyi kullanan zaman serisi tahmin projesi.
  9. İstatistiksel analiz, makine öğrenimi ve derin öğrenme kullanılarak zaman serisi sınıflandırması.

Hiç geleceği tahmin etmeyi denediniz mi? Önümüzde uzanan şey genellikle yalnızca bekleyerek çözülebilecek bir gizemdir. Bu makalede ve bir sonraki makalede, beklemeyi bırakıp geleceği tahmin etmek için güçlü ARIMA sınıfı modellerini nasıl kullanacağımızı öğreneceğiz. Zaman serilerini analiz etmek, özel modeller oluşturmak ve belirsizlik altında tahmin yapmak için statsmodels paketini nasıl kullanacağınızı öğreneceksiniz. Önümüzdeki 24 saatte borsa nasıl hareket edecek? Gelecek on yılda CO2 seviyeleri nasıl değişecek? Gelecek yıl kaç deprem olacak? Tüm bu sorunları ve daha fazlasını nasıl çözeceğinizi öğreneceksiniz.

Bu makalede kullanılan veriler ve kullanılan kodlar şu adreste bulunabilir: bu depo.

İçindekiler:

1. ARMA modellerine giriş

  • Durağanlığa giriş
  • Durağan bir zaman serisi oluşturma
  • AR, MA ve ARMA modellerine giriş

2. Geleceğe uyum sağlamak

  • Zaman serisi modellerinin takılması
  • Tahmin etmek
  • Durağan olmayan zaman serileri için ARIMA modelleri

3. Referanslar

1.ARMA modelleri

Durağanlığa ve bunun ARMA modelleri için ne kadar önemli olduğuna kısa bir girişle başlayacağız. Daha sonra durağanlığın gözle ve standart bir istatistiksel testle nasıl test edileceğini inceleyeceğiz. Bu konular hakkında daha fazla bilgi edinmek istiyorsanız önceki makalelerime göz atabilirsiniz. Python’da Zaman Serisi Analizi orada daha ayrıntılı olarak tartışıldıkları için. Son olarak ARMA modellerinin temel yapısını öğrenecek ve bunu bazı ARMA verileri oluşturmak ve bir ARMA modeline uydurmak için kullanacaksınız.

kullanacağız şeker üretimi veri seti1972 ile 2018 yılları arasında ABD’deki aylık şeker üretimini temsil eder. Özellikle IPG3113N endüstriyel üretim endeksini kullanacağız. Bu, Ocak 2012 üretiminin yüzdesi olarak ABD’de aylık olarak üretilen toplam şeker ve şekerleme ürünleri miktarıdır. Yani 120, Ocak 2012 sanayi üretiminin %120’si olacaktır.

1.1. Durağanlığa giriş

Durağanlık, verilerin dağılımının zaman içinde değişmemesi anlamına gelir. Bir zaman serisinin durağan olabilmesi için üç kriteri karşılaması gerekir:

  • Serinin sıfır trendi var. Büyümüyor veya küçülmüyor.
  • Varyans sabittir. Veri noktalarının sıfır çizgisine olan ortalama uzaklığı değişmez.
  • Otokorelasyon sabittir. Zaman serisindeki her değerin komşularıyla olan ilişkisi aynı kalır.

Durağanlığın önemi, bir zaman serisinin modellenmesi için durağan olması gerektiği gerçeğinden kaynaklanmaktadır. Bunun nedeni, modellemenin tamamen verileri temsil eden parametrelerin tahmin edilmesiyle ilgili olmasıdır, dolayısıyla veri parametreleri zaman içinde değişirse tüm parametreleri tahmin etmek zor olacaktır.

Öncelikle aylık şeker üretimi veri setini yükleyip grafiğini çizelim:

Genellikle makine öğreniminde modelinizi ayarlayacağınız bir eğitim setiniz ve tahminlerinizi test edeceğiniz bir test setiniz bulunur. Zaman serisi tahmini tamamen aynıdır. Tren test bölümümüz farklı olacak. Geleceğe yönelik tahminler yapmak için geçmiş değerleri kullanıyoruz, dolayısıyla verileri zaman içinde dilimlememiz gerekecek. Zaman serisindeki önceki veriler üzerinde eğitim alıyoruz ve ardından gelen veriler üzerinde test yapıyoruz. DataFrame’i kullanarak zaman serilerini belirli bir tarihte aşağıda gösterildiği gibi bölebiliriz. .loc yöntem.

1.2. Durağan bir zaman serisi oluşturma

Sabit test yapmanın birçok yolu vardır; bunlardan biri gözleri kullanarak, diğerleri ise istatistiksel testleri kullanarak daha resmidir. Durağan olmayan zaman serilerini durağan hale getirmenin de yolları vardır. Bu alt bölümde her ikisine de değineceğiz ve ardından modellemeye başlamaya hazır olacaksınız.

Bir zaman serisinin durağan olup olmadığını belirlemek için en yaygın test, artırılmış Dicky-Fuller testidir. Bu, boş hipotezin zaman serinizin trend nedeniyle durağan olmadığı yönünde olduğu istatistiksel bir testtir. Artırılmış Dicky-Fuller testini istatistiksel modelleri kullanarak uygulayabiliriz. Öncelikle ithal ediyoruz reklamcı gösterildiği gibi şeker üretimi zaman serisinde çalıştırabiliriz.

Sonuç nesnesi bir demettir. Sıfır öğesi test istatistiğidir, bu durumda -1,77’dir. Bu sayı ne kadar negatif olursa verinin durağan olma ihtimali de o kadar artar. Sonuç kümesindeki bir sonraki öğe, testin p değeridir. İşte 0,3. P değeri 0,05’ten küçükse sıfır hipotezini reddederiz ve zaman serimizin durağan olması gerektiğini varsayarız. Tuple’ın son öğesi bir sözlüktür. Bu, test istatistiğinin farklı p değerlerine eşdeğer olan kritik değerlerini saklar. Bu durumda p değerinin 0,05 veya daha düşük olmasını istiyorsak test istatistiğimizin -2,86’nın altında olması gerekiyordu.

Bu sonuca göre zaman serisinin durağan olmadığından eminiz. Bu nedenle veriyi modellemeden önce durağan bir forma dönüştürmemiz gerekecek. Bunu biraz klasik makine öğrenimindeki özellik mühendisliğine benzetebiliriz. Bir zaman serisini durağan hale getirmenin çok yaygın bir yolu, farkını almaktır. Bu, zaman serimizdeki her değerden önceki değeri çıkardığımız yerdir.

Sonuçlardan zaman serilerinin artık durağanlaştığını görebiliriz. Bu sefer farkı almak onu durağan hale getirmek için yeterliydi ama diğer zaman serileri için farkı birden fazla yapmamız veya başka dönüşümler yapmamız gerekebilir. Bazen zaman serisini durağan hale getirmek için başka dönüşümler yapmamız gerekebilir. Bu, bir zaman serisinin logaritmasını veya karekökünü almak veya orantılı değişimi hesaplamak olabilir. Bunlardan hangisinin yapılacağına karar vermek zor olabilir ancak çoğu zaman en basit çözüm en iyisidir.

1.3. AR, MA ve ARMA modellerine giriş

Otoregresif (AR) modelde, zaman serisinin değerlerini aynı zaman serisinin önceki değerlerine göre regrese ederiz. Basit bir AR modelinin denklemi aşağıda gösterilmiştir:

Ve

Zaman serisinin zaman içindeki değeri

Bu birinci sınıf bir AR modelidir. Modelin sırası, kullanılan zaman gecikmelerinin sayısıdır. İkinci dereceden bir AR modeli iki otoregresif katsayıya ve iki bağımsız değişkene sahiptir; birinci gecikmedeki seri ve ikinci gecikmedeki seri. Daha genel olarak AR modelinin sırasını belirtmek için p’yi kullanırız. Bu, p otoregresif katsayılarımıza sahip olduğumuz ve p gecikmeleri kullandığımız anlamına gelir.

içinde hareketli ortalama (MA) modelde zaman serisi değerlerini aynı zaman serisinin önceki şok değerlerine göre regrese ediyoruz. Basit bir MA modelinin denklemi aşağıda gösterilmiştir:

Ve

Zaman serisinin değeri ve

ARMA modeli AR ve MA modellerinin birleşimidir. Zaman serisi önceki değerlere ve önceki şok terimlerine göre regrese edilmiştir. Bu bir SİLAH-bir-bir modelidir. Daha genel olarak ARMA modelini tanımlamak için ARMA(p,q) kullanırız. P bize modelin otoregresif kısmının sırasını, q ise hareketli ortalama kısmının sırasını söyler.

Ve

Kullanmak istatistiksel modeller paketiyle ARMA modellerini ayarlayabilir ve ARMA verileri oluşturabiliriz. Bu SİLAH-bir-bir modelini ele alalım. Diyelim ki verileri bu katsayılarla simüle etmek istiyoruz. İlk olarak arma-generate-sample fonksiyonunu içe aktarıyoruz. Daha sonra AR ve MA katsayıları için listeler yapıyoruz. Her iki katsayı listesinin de bir ile başladığını unutmayın. Bu sıfır gecikme terimi içindir ve onu her zaman bire ayarlayacağız. Gecikmeli AR katsayısını 0,5’e ve MA katsayısını 0,2’ye ayarladık. Katsayıları, oluşturulacak veri noktalarının sayısını ve çökmelerin standart sapmasını aktararak verileri üretiyoruz. Burada aslında istediğimiz AR katsayılarının negatifini geçiyoruz. Bu hatırlamamız gereken bir özellik.

Üretilen veriler şu denklemle temsil edilebilir:

Ve

Yerleştirme bir sonraki bölümde ele alınmaktadır, ancak burada bu verileri nasıl sığdırabileceğimize hızlı bir bakış atacağız. Öncelikle ARMA model sınıfını import ediyoruz. Modeli somutlaştırıyoruz, onu verilerle besliyoruz ve modelin sırasını tanımlıyoruz. Sonra nihayet tıkladık.

2. Geleceğe uyum sağlayın

Bu bölümde zarif statsmodels paketini ARMA, ARIMA ve ARMAX modellerine uyarlamak için nasıl kullanacağınızı öğreneceksiniz. Daha sonra modellerinizi belirsiz geleceği tahmin etmek için kullanacaksınız. Amazon hisse senedi fiyatları.

2.1. Zaman serisi modellerinin takılması

Son bölümde zaman serisi modellerinin uydurulmasına hızlıca göz atmıştık ama gelin daha yakından bakalım. Bu modellere uyacak şekilde öncelikle içe aktarıyoruz. ARIMA model sınıfı istatistiksel modeller paket. Bir model nesnesi oluşturup modelin sırasını tanımlıyoruz, aynı zamanda eğitim verilerini de beslememiz gerekiyor. Veriler bir pandas veri çerçevesi, bir pandas dizisi veya bir NumPy dizisi olabilir. ARIMA modelinin sırasının (p,d,q) olduğunu hatırlayın; p, otoregresif gecikmelerdir, d, farkın sırasıdır ve q, hareketli ortalama gecikmelerdir. d her zaman bir tamsayıdır, p ve q ise tamsayılar veya tamsayı listeleri olabilir. Bir AR modeline uymak için, q’nun sıfıra eşit olduğu ARMA sınıfını kullanabiliriz. Bir MA modeline uymak için p’yi sıfıra eşitliyoruz.

Takılan modelin sonuç özetine bir göz atalım:

Üst kısım, uyduğumuz modelin sırası, gözlem veya veri noktası sayısı, zaman serisinin adı gibi faydalı bilgileri içerir. Yeniliklerin SD’si şok terimlerinin standart sapmasıdır.

Özetin bir sonraki bölümü takılan modelin parametrelerini gösterir. Burada bir ARIMA(1,0,1) modelini yerleştirdik, dolayısıyla model AR-lag-1 ve lag-1 katsayılarına sahip oldu. Tabloda bunlar ar.L1 ve ma.L1 satırlarıdır. MA lag-1 katsayısı son satırdadır. İlk sütun model katsayılarını gösterirken, ikinci sütun bu katsayılara ilişkin standart hatayı göstermektedir. Bu, takılan katsayıların değerleri hakkındaki belirsizliktir.

ARMA modelinin olası bir uzantısı, dışsal girdilerin kullanılmasıdır. ARMAX modeli. Bu, zaman serisini, zaman serisinin kendisine ek olarak diğer bağımsız değişkenleri kullanarak modellediğimiz anlamına gelir. Bu, ARMA modeli ile normal doğrusal regresyon modeli arasındaki kombinasyona benzer. Burada iki basit ARMA ve ARMAX modelinin denklemleri gösterilmektedir. Tek fark ek bir terimdir. Yeni bir bağımsız değişken z ekliyoruz

SİLAH Modeli(1,1):

Ve

ARMAX(1,1) modeli:

y = x(1)* z

Daha önce kullandığımız ARMA modelinin aynı sınıfını kullanarak bir ARMAX modeli yerleştirebiliriz. Tek farkımız artık exog anahtar sözcüğünü kullanarak eksojen değişkenimizi tanıtacak olmamızdır. Model sırası ve montaj prosedürü tamamen aynıdır.

2.2. Tahmin etmek

ARIMA modellerinin verilere nasıl sığdırılacağını anlattıktan sonra, geleceği tahmin etmek ve tahmin etmek için bunları nasıl kullanabileceğimize bakalım. AR(1) modeliyle temsil edilen bir zaman serisi örneğini ele alalım. Zaman serisinin herhangi bir anında önceki değeri bir gecikme AR katsayısıyla çarparak sonraki değerleri tahmin edebiliriz. Önceki değer 15 ve a-bir katsayısı 0,5 olsaydı bir sonraki değerin 7,5 olacağını tahmin ederdik. Şok teriminin standart sapması 1 olsaydı üst ve alt belirsizlik sınırlarımızın 6,5 ve 8,5 olacağını tahmin ederdik. Bu tür tahmine denir ileri bir adım tahmini. Denkleminiz aşağıdadır:

y = 0,5 x 15 + ϵ

23. Durağan olmayan zaman serileri için ARIMA modelleri

Tahmin etmeye çalıştığınız zaman serisi durağan değilse ARMA modelini ona uygulayamazsınız. Önce onu durağan hale getirecek bir fark yaratmalıyız, sonra bunun için ARMA modelini kullanabiliriz. Ancak bunu yaptığımızda zaman serisinin fark değerini tahmin edecek şekilde eğitilmiş bir modele sahip olacağız. Aslında tahmin etmek istediğimiz şey fark değil, zaman serisinin gerçek değeridir. Bunu, farklılıklara ilişkin öngörülerimizi dikkatli bir şekilde dönüştürerek başarabiliriz.

Fark değerlerinin tahminleriyle başlıyoruz, farkı almanın tersi kümülatif veya integral toplamı almaktır. Fark değerlerinin tahminlerinden mutlak değerlerin tahminlerine geçmek için bu dönüşümü kullanmamız gerekecek.

Bunu kullanarak yapabiliriz np.cumsum işlev. Bu fonksiyonu uygularsak, artık zaman serisinin tahmin dönemi boyunca başlangıç ​​değerinden ne kadar değiştiğine dair bir tahmine sahip oluruz. Mutlak bir değer elde etmek için orijinal zaman serisinin son değerini buna eklemeliyiz.

Bu adımlar durağan olmayan verilerle başlar; sabit hale getirmek için farklılaştırma; ve daha sonra tahminin entegre edilmesi, zaman serisi modellemesinde çok yaygındır. Bu çok iş! Ama neyse ki ARMA modelinin bunu bizim için yapan bir uzantısı var! Bu, otoregresif entegre hareketli ortalama modelidir (ARIMA).

Statsmodels’deki SARIMAX model sınıfını kullanarak bir ARIMA modeli uygulayabiliriz. ARIMA modelinin üç model sırası vardır. Bunlar p otoregresif sıralamadır; d farklılaşma sırası ve q hareketli ortalamanın sırası. Önceki bölümde orta dereceli parametre d’yi sıfıra ayarladık. Eğer d sıfırsa, basitçe bir ARMA modelimiz olur.

Bu modeli kullandığımızda farklılaşmamış bir zaman serisinde ve modelin sırasına göre çalıştırıyoruz. Zaman serisi verilerinin yalnızca bir kez türevini almak ve ardından ARMA(2,1) modelini uygulamak istediğimizde. Bu, ARIMA(2,1,1) modeli kullanılarak elde edilir. Fark parametresini ayarladıktan sonra artık farklılaşma konusunda endişelenmemize gerek yok. Modeli daha önce olduğu gibi ayarlıyoruz ve tahminler yapıyoruz. Model nesnesi farklılaşma ve entegrasyon adımlarıyla ilgilenir. Bu, durağan olmayan zaman serileri için tahmin almanın çok daha kolay bir yoludur!

Doğru miktarda farklılaşmayı seçerken hala dikkatli olmamız gerekiyor. Unutmayın, verilerimizi yalnızca sabit olana kadar farklılaştırıyoruz, daha fazla değil. Modelimizi uygulamadan önce, farkın sırasını belirlemek için genişletilmiş Dicky-Fuller testini kullanarak bu sorunu çözeceğiz. Yani bir modeli uygulamaya geldiğimizde uygulamamız gereken farklılaşma derecesini zaten biliyoruz.

Bunu gerçek verilere uygulayalım. Kullanılacak veriler şunlardır: Amazon hisse senedi fiyat verileri. Her iki yöntemi de uygulayacağız. Veriler üzerinde ilk olarak ARMA modellerinin farkla kullanılması ve ARIMA modelinin yerleşik farkla kullanılması.

İlk olarak veriler yüklenecek ve çizilecektir.

Öncelikle zaman serisinin durağan olup olmadığını anlamak için Adfuller-Dickey testini uygulayacağız.

Bunun sonucu şudur:

P değeri 0,05’ten büyük olduğundan sıfır hipotezi reddedilemez ve zaman serisinin durağan olmadığı kabul edilir. Bu nedenle birinci farkı alıp Adfuller-Dickey testini kullanarak bunun durağan olup olmayacağını kontrol edeceğiz.

Amazon hisse senedi fiyatı zaman serisinin ilk farkını aldıktan sonraki p değeri 0,05’ten küçüktür, dolayısıyla sıfır hipotezini reddedebiliriz ve veriler artık durağan kabul edilir. Modelleme adımı için yukarıda bahsettiğimiz iki yoldan birini takip edebiliriz. Öncelikle ARMA modelini kullanın ve onu birinci farkla verilere uygulayın. Yani o np.cumsum Fonksiyon, fark içeren verilerin değil, gerçek verilerin tahmin edilmesi için kullanılacaktır.

İkinci yöntem ise ARIMA modelini kullanarak gerçek verileri kullanarak fark parametresini kullanmaktır. ARIMA işlev.

Bu makalenin 2. bölümünde, otokorelasyon fonksiyonu (ACF) ve kısmi otokorelasyon fonksiyonu (PACF) grafiğini kullanarak ve Akaike bilgi kriteri (AIC) ve Bayesian Information Systems (BIC) kriterlerini kullanarak en iyi model parametresinin nasıl seçileceğini tartışacağız. ) seçeneklerimizi daraltmak için. Bundan sonra ham zaman serisinden üretime hazır bir modele geçmenize yardımcı olacak Box-Jenknis yöntemini tartışacağız. Daha sonra bunun mevsimsel zaman serilerine nasıl uygulanacağını tartışacağız.

3. Referanslar

[1]. https://app.datacamp.com/learn/courses/arima-models-in-python

[2].https://www.statsmodels.org/devel/generate/statsmodels.tsa.arima.model.ARIMA.html


Python’da ARIMA Modelleriyle Zaman Serisi Tahmini [Part 1] ilk olarak Medium’da Towards AI’da yayınlandı; burada insanlar bu hikayeyi vurgulayarak ve ona yanıt vererek sohbeti sürdürüyorlar.

Towards AI aracılığıyla yayınlandı

Diğer ilginç konular: