時系列予測はデータサイエンスの最も需要のある技術の1つである。 株式取引、企業の売上予測、天気予報など、さまざまな分野で活用されています。 このチュートリアルでは、Python を使用して、特定の都市の将来の気温を予測する ARIMA モデルを構築します (この仕組みがまだよくわからなくても心配しないでください)。 コードとデータセットのGitHubのリンクは、このブログの最後にあります。 また、ビデオによる説明に興味がある方のために、最後に私のYouTubeビデオを添付しています。
どのような時系列であっても、最初のステップはデータを読み込んで、それがどのように見えるかを見ることです。 次のコード スニペットは、その方法を示しています。
コードは非常に簡単です。 pd.read_csv を使用してデータを読み込み、parse_date=True を記述して、pandas が文字列値ではなく日付値を扱っていることを理解するようにします。
次に、欠損値を削除して、データの形状を表示します。 以下は、このときの出力です:
Plot Your data
次は、データのプロットを行います。 これにより、データが定常的かどうかを知ることができます。 定常性がどういう意味かわからない人のために、その概要を説明します。 このトピックについていくつかのビデオを作成しましたが、結局のところ、次のようなことです。 定常とは、その統計的性質が時間に対して多かれ少なかれ一定であることを意味します。 理にかなっていますよね? 統計的特性が時間とともに変化する場合、どのように予測を行うのでしょうか?
- 一定の平均値
- 一定の分散(ばらつきはあるが、不規則であってはならない)
- 季節性なし(データセットに繰り返しのパターンはない)
そこで最初のステップとして、定常性をチェックすることにします。 もしデータセットが定常でないなら、定常系列に変換する必要があります。 さて、このような心配をする前に、リラックスしてください。 ADF(Augmented Dickey Fuller Test)と呼ばれる定常性をチェックするための簡単なテストがあります。 しかし、それを示す前に、まずデータをプロットしてみましょう。
私は平均気温を予測することにしか興味がないので、プロットするのはその列だけにしておきます。
df.plot(figsize=(12,5))
Checking For Stationarity
すぐに、45前後の一定の平均を持っているようだとわかるでしょう。 また、変動もだいたい同じような感じです。 しかし、データが定常かどうかを確かめるために、次のコードを使って固定統計テストを実行します:
すべての複雑な統計について気にする必要はない。 検定結果を解釈するには、p値だけを見ればいいのです。
If p< 0.05 ; Data is stationary
if p>0.05; Data is not stationary
厳密なルールではないが、定常データはp値が小さいはずである。 p値が大きいと、特定の傾向(平均値の変化)や季節性があることを示している可能性があります。
最後に、ARIMAモデルを決める
さて、私はこのトピックについていくつかのYouTubeビデオを作りましたが、ARIMAモデルとは何かを十分に理解していない場合は、簡単に概要を紹介させてください。
ARIMA は 3 つの用語 (Auto-Regression + Integrated + Moving-Average) で構成されます。
- Auto-Regression:
これは基本的に、将来を予測するために時系列の以前の値を使用していることを意味しています。 どのように多くの過去の値を使用するか、AR モデルの順序を決定します。 AR(1) モデルがどのように見えるかを示します。
Y(t)= Some_Constant*Y(t-1)+ Another_Constant +Error(t)
2. 統合:
定常性について、それがいかに非常に重要かという話を覚えていますか? データセットが定常でない場合、ほとんどの場合、定常にするためにある種の差分操作を行う必要があります。 前の値との差分であれば、その次数は1、といった具合です。 以下はその例です。
すみません、下手な絵を描きましたね。 しかし、シリーズY(t)は、増加傾向の結果、平均が変化しているので、静止していないことがわかります。 以前の値から単純にそれを引くと、ほら! 定常状態になります。 データによっては、2次差分、3次差分など、差分を繰り返す必要があります。 移動平均:
これは基本的に、将来の予測を行うために以前の誤差を使用することを意味します。 また、理にかなっていますよね? 自分の予測がいかに間違っていたかを見ることで、それを考慮してより良い予測をするのです。
以下は、MA(1)の次数式です:
Y(t)= Mean + Some_Constant*Error(t-1) +Error(t)
したがって、我々の主な仕事は、AR、I、MAの部分の次数を決めることで、それぞれ(p、d、q)で提供されるものです。
そして、心配する前に言っておきますが、すべて自動的に行われます。 pmdarimaライブラリが私たちを助けてくれます!ARIMAの次数を計算するのは、すべてこのライブラリがやってくれます。
from pmdarima import auto_arima
stepwise_fit = auto_arima(df, trace=True,
suppress_warnings=True)
(pip install pmdarimaでpmdarimaライブラリをインストールしてください)
このコードはとてもわかりやすいものです。 単純に auto_arima 関数にデータを供給します。 この関数は基本的に AIC スコアと呼ばれるものを使用して、特定の順序モデルがどれくらい良いかを判断します。 この関数は単純にAICスコアを最小化しようとするもので、出力は以下のようになります。
We can see the best ARIMA model seems be the order (1,0,5) with the minimum AIC score=8294.The order of the ARIMA model is the oldest and the best order to have the best, but the best order to the ARIMA model is the best and the best order to have the best.785. この知識により、最終的に、予測を開始するために、モデルの訓練と適合に進むことができます!
Split Your Dataset
実際にモデルを訓練する前に、データセットを訓練とテストのセクションに分割する必要があります。 これは、まずデータ上でモデルを学習させ、テスト セクションをモデルから隠しておくためです。 モデルが準備できたら、テスト データで予測させ、そのパフォーマンスを確認します。
print(df.shape)
train=df.iloc
test=df.iloc
print(train.shape,test.shape)
次のコード スニペットは、これを行う方法を示しています。
Finally, We get to the Juicy Stuff!
意外にも、ARIMAモデルの作成は、前提条件をすべて満たしていれば、実は最も簡単なステップの1つなのです。 以下のコード スニペットに示すように簡単です。
from statsmodels.tsa.arima_model import ARIMA
model=ARIMA(train,order=(1,0,5))
model=model.fit()
model.summary()
ご覧のように、単に ARIMA 関数を呼び出し、データセットを提供し、必要な ARIMA モデルの順序を指定します。
ここで、モデルに関する多くの情報を見ることができます。 また、各AR項、MA項の係数を見ることができます。 これらは、前のAR/MAモデル式で「Some_Constant」と表示された変数の値にほかなりません。 一般的に、この変数の大きさが大きいほど、出力に大きな影響を与えることを意味します。
Check How Good Your Model Is
ここで、テストデータが登場します。 まず、テストデータで温度の予測を行います。
実際に予測を行うには、model.predict 関数を使用し、予測を行う開始インデックスと終了インデックスを指定する必要があります。 データセットが終了した時点で予測を停止したいので、end変数に記述しています。 もし将来の予測も行いたいのであれば、startとendの変数を好きなインデックスに変更すればよいでしょう。 出力プロットは次のようになります:
あなたが見るように予測値は実際のトレンドと一致し、ある許容遅延はありますがかなり良い仕事しています。
精度メトリックを確認する
モデルの良し悪しを実際に確認するために、そのモデルの二乗平均平方根誤差を見つけます。 次のコード スニペットはそれを示しています。
最初に、データ セットの平均値をチェックし、それは 45 となります。 そして、この特定のモデルの二乗平均平方根誤差は約 2.3 になるはずです。 また、二乗平均平方根はテストセットの平均値より非常に小さくなるように注意する必要があります。 この場合、平均誤差は実際の値の約2.3/45 *100=5.1%になることがわかります。
これでARIMAモデルの準備が整いました。 今後のブログでは、さまざまなモデルや、モデルの精度をさらに高める方法についてお話する予定です。
同じ内容のビデオ説明に興味がある方は、私の YouTube チャンネルにアクセスして、このようなコンテンツをもっと見てください! コードとデータセットの GitHub のリンクはこちらです。 https://github.com/nachi-hebbar/ARIMA-Temperature_Forecasting
LinkedIn でも私とつながることができます!
…
コメントを残す