# 時系列予測の入門 ![時系列の概要をスケッチノートで表現](../../../../sketchnotes/ml-timeseries.png) > スケッチノート: [Tomomi Imura](https://www.twitter.com/girlie_mac) このレッスンと次のレッスンでは、時系列予測について学びます。時系列予測は、機械学習科学者のレパートリーの中で興味深く価値のある分野ですが、他のトピックほど知られていない部分もあります。時系列予測は、過去のパフォーマンスに基づいて、価格などの変数の将来の潜在的な価値を予測する、一種の「水晶玉」のようなものです。 [![時系列予測の入門](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "時系列予測の入門") > 🎥 上の画像をクリックすると、時系列予測に関する動画が視聴できます ## [講義前のクイズ](https://ff-quizzes.netlify.app/en/ml/) 時系列予測は、価格設定、在庫管理、サプライチェーン問題への直接的な応用があるため、ビジネスにとって非常に価値のある興味深い分野です。深層学習技術が将来のパフォーマンスをより良く予測するための洞察を得るために使われ始めていますが、時系列予測は依然として古典的な機械学習技術によって大きく支えられています。 > Penn Stateの役立つ時系列カリキュラムは[こちら](https://online.stat.psu.edu/stat510/lesson/1)で見つけることができます ## はじめに 例えば、スマート駐車メーターの配列を管理しており、それが時間の経過とともにどのくらい頻繁に使用され、どのくらいの時間使用されるかについてのデータを提供しているとします。 > 過去のパフォーマンスに基づいて、供給と需要の法則に従ってその将来の価値を予測できるとしたらどうでしょう? 目標を達成するためにいつ行動すべきかを正確に予測することは、時系列予測によって取り組むことができる課題です。忙しい時間帯に駐車場を探している人々に高額を請求するのは喜ばれることではありませんが、街を清掃するための収益を生み出す確実な方法となるでしょう! 時系列アルゴリズムの種類をいくつか探り、データをクリーンアップして準備するノートブックを始めましょう。この例で分析するデータは、GEFCom2014予測コンペティションから取得したものです。このデータは、2012年から2014年までの3年間の毎時の電力負荷と温度値で構成されています。電力負荷と温度の過去のパターンを基に、電力負荷の将来の値を予測することができます。 この例では、過去の負荷データのみを使用して、1つのタイムステップ先を予測する方法を学びます。ただし、始める前に、舞台裏で何が起こっているのかを理解することが役立ちます。 ## いくつかの定義 「時系列」という用語に出会ったとき、その使用がいくつかの異なる文脈であることを理解する必要があります。 🎓 **時系列** 数学では、「時系列とは、時間順にインデックス付け(またはリスト化またはグラフ化)されたデータポイントの系列です。最も一般的には、時系列は時間的に等間隔で連続して取得された一連のデータです。」時系列の例としては、[ダウ平均株価](https://wikipedia.org/wiki/Time_series)の毎日の終値があります。時系列プロットや統計モデリングの使用は、信号処理、天気予報、地震予測、その他のイベントが発生し、データポイントが時間を通じてプロットできる分野で頻繁に見られます。 🎓 **時系列分析** 時系列分析とは、上記の時系列データの分析を指します。時系列データは、特定の形式を取ることがあり、「中断時系列」のように、中断イベントの前後で時系列の進化のパターンを検出するものがあります。時系列に必要な分析の種類は、データの性質によって異なります。時系列データ自体は、数値や文字列の系列の形を取ることがあります。 分析には、周波数領域や時間領域、線形や非線形など、さまざまな方法が使用されます。[こちら](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm)で、このタイプのデータを分析する多くの方法について学ぶことができます。 🎓 **時系列予測** 時系列予測とは、過去に収集されたデータが示すパターンに基づいて、将来の値を予測するためのモデルの使用を指します。時系列データを探索するために回帰モデルを使用することは可能ですが、時間インデックスをプロット上のx変数として使用する場合、そのようなデータは特別なタイプのモデルを使用して分析するのが最適です。 時系列データは、線形回帰で分析できるデータとは異なり、順序付けられた観測値のリストです。最も一般的なものはARIMAで、「自己回帰型積分移動平均」を意味する頭字語です。 [ARIMAモデル](https://online.stat.psu.edu/stat510/lesson/1/1.1)は、「シリーズの現在の値を過去の値や過去の予測誤差に関連付ける」ものです。これらは、時間領域データを分析するのに最も適しています。時間領域データは、時間を通じて順序付けられたデータです。 > ARIMAモデルにはいくつかの種類があり、[こちら](https://people.duke.edu/~rnau/411arim.htm)で学ぶことができます。次のレッスンで触れる予定です。 次のレッスンでは、[単変量時系列](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm)を使用してARIMAモデルを構築します。単変量時系列は、時間とともに値が変化する1つの変数に焦点を当てます。このタイプのデータの例としては、Mauna Loa Observatoryで記録された月ごとのCO2濃度を示す[このデータセット](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm)があります。 | CO2 | YearMonth | Year | Month | | :----: | :-------: | :---: | :---: | | 330.62 | 1975.04 | 1975 | 1 | | 331.40 | 1975.13 | 1975 | 2 | | 331.87 | 1975.21 | 1975 | 3 | | 333.18 | 1975.29 | 1975 | 4 | | 333.92 | 1975.38 | 1975 | 5 | | 333.43 | 1975.46 | 1975 | 6 | | 331.85 | 1975.54 | 1975 | 7 | | 330.01 | 1975.63 | 1975 | 8 | | 328.51 | 1975.71 | 1975 | 9 | | 328.41 | 1975.79 | 1975 | 10 | | 329.25 | 1975.88 | 1975 | 11 | | 330.97 | 1975.96 | 1975 | 12 | ✅ このデータセットで時間とともに変化する変数を特定してください ## 時系列データの特徴を考慮する 時系列データを観察すると、[特定の特徴](https://online.stat.psu.edu/stat510/lesson/1/1.1)があることに気付くかもしれません。これらの特徴を考慮し、軽減することで、そのパターンをよりよく理解することができます。時系列データを「信号」として分析する可能性があると考える場合、これらの特徴は「ノイズ」として捉えることができます。この「ノイズ」を軽減するために、いくつかの統計的手法を使用する必要があることがあります。 時系列データを扱うために知っておくべき概念を以下に示します。 🎓 **トレンド** トレンドは、時間の経過に伴う測定可能な増加や減少として定義されます。[詳細はこちら](https://machinelearningmastery.com/time-series-trends-in-python)。時系列の文脈では、トレンドを使用し、必要に応じて時系列からトレンドを除去する方法についてです。 🎓 **[季節性](https://machinelearningmastery.com/time-series-seasonality-with-python/)** 季節性は、例えばセールスに影響を与えるホリデーラッシュのような周期的な変動として定義されます。[こちら](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm)で、データの季節性を表示するさまざまなプロットの種類を確認してください。 🎓 **外れ値** 外れ値は、標準的なデータの分散から大きく離れた値です。 🎓 **長期サイクル** 季節性とは独立して、データは1年以上続く経済的な低迷のような長期サイクルを示すことがあります。 🎓 **一定の分散** 時間の経過とともに、データは一定の変動を示すことがあります。例えば、昼夜のエネルギー使用量などです。 🎓 **急激な変化** データは、さらなる分析が必要な急激な変化を示すことがあります。例えば、COVIDによる事業の突然の閉鎖は、データに変化を引き起こしました。 ✅ [こちら](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python)に数年間にわたるゲーム内通貨の毎日の消費を示す時系列プロットのサンプルがあります。このデータで上記の特徴のいくつかを特定できますか? ![ゲーム内通貨の消費](../../../../7-TimeSeries/1-Introduction/images/currency.png) ## 演習 - 電力使用量データで始める 過去の使用量を基に、将来の電力使用量を予測する時系列モデルを作成してみましょう。 > この例のデータは、GEFCom2014予測コンペティションから取得したものです。 > > Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli and Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016. 1. このレッスンの`working`フォルダ内にある_notebook.ipynb_ファイルを開き、データの読み込みと可視化を助けるライブラリを追加します。 ```python import os import matplotlib.pyplot as plt from common.utils import load_data %matplotlib inline ``` 注意: 環境を設定し、データのダウンロードを処理する`common`フォルダのファイルを使用しています。 2. 次に、`load_data()`と`head()`を呼び出してデータをデータフレームとして確認します。 ```python data_dir = './data' energy = load_data(data_dir)[['load']] energy.head() ``` 日付と負荷を表す2つの列があることがわかります。 | | load | | :-----------------: | :----: | | 2012-01-01 00:00:00 | 2698.0 | | 2012-01-01 01:00:00 | 2558.0 | | 2012-01-01 02:00:00 | 2444.0 | | 2012-01-01 03:00:00 | 2402.0 | | 2012-01-01 04:00:00 | 2403.0 | 3. 次に、`plot()`を呼び出してデータをプロットします。 ```python energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) plt.xlabel('timestamp', fontsize=12) plt.ylabel('load', fontsize=12) plt.show() ``` ![エネルギープロット](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) 4. 次に、2014年7月の最初の週を`energy`に`[開始日]:[終了日]`パターンとして入力してプロットします。 ```python energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) plt.xlabel('timestamp', fontsize=12) plt.ylabel('load', fontsize=12) plt.show() ``` ![7月](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) 美しいプロットですね!これらのプロットを見て、上記の特徴のいくつかを特定できますか?データを視覚化することで何が推測できるでしょうか? 次のレッスンでは、ARIMAモデルを作成して予測を行います。 --- ## 🚀チャレンジ 時系列予測が役立つと思われるすべての産業や研究分野のリストを作成してください。これらの技術が芸術、計量経済学、生態学、小売業、産業、金融などでどのように応用されるか考えられますか?他にどこで役立つでしょうか? ## [講義後のクイズ](https://ff-quizzes.netlify.app/en/ml/) ## 復習と自己学習 ここでは取り上げませんが、ニューラルネットワークは時系列予測の古典的な方法を強化するために使用されることがあります。[この記事](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412)で詳細を読むことができます。 ## 課題 [さらに時系列を可視化する](assignment.md) --- **免責事項**: この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された原文を公式な情報源としてご参照ください。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用に起因する誤解や誤認について、当社は一切の責任を負いません。