見出し画像

1-5 時系列の変動の性質 〜 傾向変動・季節変動・不規則変動

今回の統計トピック


時系列データ特有の特徴「傾向変動・季節変動・不規則変動」をグラフで可視化して、時間の波を感じますよっ!

公式問題集の準備

「公式問題集」の問題を利用します。お手元に公式問題集をご用意ください。
公式問題集が無い場合もご安心ください!
「知る」「実践する」の章で、のんびり統計をお楽しみください!

問題を解く


📘公式問題集のカテゴリ

1変数記述統計の分野
問5 時系列の変動の性質

試験実施年月
統計検定2級 2019年11月 問4(回答番号8)

問題

公式問題集をご参照ください。

解き方

時系列データは、時間の順序があるデータです。
刻一刻と変動する株価、日々の売上高、月次の政府統計発表、四半期の決算開示などは時系列データの例です。

時系列データを時間の推移で分析すると、何らかの基礎的な変動が見られます。公式テキストでは、次の3つの変動を示しています。

  • 傾向変動:1年を超える長期の規則的な変動
    経済や社会の大きな変化などが要因の例です。

  • 季節変動:12ヶ月を周期とする規則的な変動
    季節・気候の変化や年末・年度末といったイベントなどが要因の例です。

  • 不規則変動:上記以外の不規則な変動
    異常気象、社会・経済動乱など、さまざまな事象が要因の例になりえます。

Ⅰの適否
傾向変動は長期の動きですが、変化の仕方は曲線的な周期性がある場合も含まれます。
選択肢①は適切ではありません。

Ⅱの適否
季節変動は1年周期です。
選択肢②は適切です。

Ⅲの適否
不規則変動は、規則的な変動(傾向変動・季節変動)以外の変動です。
予測できない変動は不規則な変動です。
選択肢③は適切ではありません。

解答

②です。

難易度 やさしい

・知識:傾向変動・季節変動・不規則変動
・計算力:不要
・時間目安:1分

知る


おしながき

公式問題集の問題に接近してみましょう!
今回は時系列データの変動パターンの可視化に取り組みます。

ここでは時系列データセットの代表例「AirPassengersデータセット」を用います。
【出典記載】
Source : Box, G. E. P., Jenkins, G. M. and Reinsel, G. C. (1976) Time Series Analysis, Forecasting and Control. Third Edition. Holden-Day. Series G.
【コンテンツ編集・加工の記載】
記事の記載にあたっては、Sourceの情報を加工して作成しています。

データの内容は、1949年1月から1960年12月までの月別飛行機乗客数です。
Month(年月)とPassengers(乗客数)で構成されています。
データの詳細は次のサイトなどで確認できます。

時系列データの変動分解

📕公式テキスト:1.7.3 時系列データの変動分解(42ページ~)

時系列データの大きな特徴は、変動の仕方に種類があることです。
主に次の3つ変動を含んでいます。

  • 傾向変動:1年を超える長期の規則的な変動
     経済や社会の大きな変化などが要因の例です。

  • 季節変動:12ヶ月を周期とする規則的な変動
     季節・気候の変化や年末・年度末といったイベントなどが要因の例です。

  • 不規則変動:上記以外の不規則な変動
     異常気象、社会・経済動乱など、さまざまな事象が要因の例になりえます。

「AirPassengersデータセット」を使って、この3つの変動を分解してみましょう。

時系列の変動分解グラフイメージ

グラフの見方
一番上が、飛行機乗客数データをそのままプロットしたものです。
右肩上がりの趨勢と小刻みな波があります。
2~4番目が変動分解した結果のグラフです。

  • 傾向変動は多少の歪みがあるものの、ほぼ一定の傾きで右肩上がりの線を描いています。
    データの時代背景から、おそらく、世界的に飛行機利用者が増加したのでしょう。

  • 季節変動は、波形をコピーしたかのように同じ傾向が見られます。
    1年間を通して一定の周期が存在するようです。

  • 不規則変動は、おおむね一様に分散しているように見えます。

各変動の計算イメージ
📕公式テキストによると、次のようにして(かなりざっくりベース)、変動分解をするようです。
■全変動
 =傾向変動+季節変動+不規則変動
■傾向変動
 =12ヶ月の移動平均 (12ヶ月周期の成分を除去)
■季節変動
 =「全変動-傾向変動」を月別に平均を取って、(平均を0にするため)月別平均の集まりの平均を差し引いて求める
■不規則変動
 =全変動-傾向変動-季節変動

実践する


時系列グラフを作成してみよう

飛行機乗客数データセットは、Kaggleサイト、ファイルを公開する各種Webサイト、Rにパッケージに含まれているデータセットなどから取得できます。
この記事では、次のWebサイトのCSVファイルを取得しました。

https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv

CSVファイルのダウンロード
公式に配布できないため、Webサイト等から取得してください。

電卓・手作業で作成してみよう!

上述の方法でデータを取得して、電卓やそろばんをはじいて書いてみてもいいのですが・・・。
今回のグラフは手作業では難しいかもしれません。

EXCELで作成してみよう!

データ数が多い場合、やはり手作業では非効率になります。
パソコンを利用して、手早く作表できるようになれば、実務活用がしやすくなるでしょうけれども・・・。
EXCELに時系列分解用の標準機能が無いようですので、計算式を駆使するなどの工夫が必要になりそうです。
EXCEL活用方法を掲載するサイトで情報収集してはいかがでしょう。
たとえば、次のサイトです。

EXCELサンプルファイルのダウンロード
今回はファイル提供はありません。

Pythonで作成してみよう!

プログラムコードを読んで、データを流したりデータを変えてみたりして、データを追いかけることで、作表ロジックを把握する方法も効果的でしょう。
サンプルコードを揃えておけば、類似する作表作業を自動化して素早く結果を得ることができます。

今回は、傾向変動・季節変動・不規則変動の分解に「statsmodels」を利用します。

①ライブラリのインポート
主にstatsmodelsを使用します。

import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'MS Gothic'
%matplotlib inline

②csvファイルの読み込み
飛行機乗客数データセットをpandasのデータフレームに読み込みます。

# Webサイトから取得する場合
path = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv'
# ローカル保存ファイルを読み込む場合
# path = './airline-passengers.csv'
df = pd.read_csv(path, index_col='Month', parse_dates=True)
df.head()
飛行機乗客数データセットの一部

③変動分解を実行してグラフをプロット
statsmodelsのseasonal_decomposeを使用して変動分解を行い、matplotlibで描画します。
「result」に元データの系列(observed)、傾向変動(trend)、季節変動(seasonal)、不規則変動(resid)の算出結果が含まれています。

# 変動分解(移動平均による加法モデル)
result=seasonal_decompose(df.Passengers, model='additive', period=12)

# この2行だけでプロットを表示可能
# result.plot()
# plt.show()

fig, ax = plt.subplots(nrows=4, ncols=1, figsize=(6, 8), sharex=True)
# 元データ系列のプロット
ax[0].set_title('Observed:原系列')
ax[0].plot(result.observed, lw=0.5)

# 傾向変動のプロット
ax[1].set_title('Trend:傾向変動')
ax[1].plot(result.trend, lw=0.5)

# 季節変動のプロット
ax[2].set_title('Seasonal:季節変動')
ax[2].plot(result.seasonal, lw=0.5)

# 不規則変動のプロット
ax[3].set_title('Residual:不規則変動')
ax[3].scatter(result.resid.index, result.resid.values, s=2)
plt.axhline(y=0, lw=0.5)

plt.tight_layout()
plt.show()
Python:時系列データの変動分解のグラフサンプル

Pythonサンプルファイルのダウンロード
こちらのリンクからJupyter Notebook形式のサンプルファイルをダウンロードできます。

Rで作成してみよう!

R初上陸です!
Rの標準パッケージに含まれている、飛行機乗客数データセット(AirPassengers)を利用します。
変動分解をしてグラフをプロットします。
Rはほとんど触れたことがないので、ネットで情報を収集して、Jupyter Notebookの実行にこぎつけました!

①変動分解データのプロット
AirPassengersデータセットは、時系列オブジェクト ts という時系列データ専用の形式で格納されています。

xt.stl<-stl(AirPassengers,s.window="periodic")
plot(xt.stl)
R:時系列データの変動分解のグラフサンプル

Rサンプルファイルのダウンロード
こちらのリンクからJupyter Notebook形式のサンプルファイルをダウンロードできます。



おわりに

Rが出ました!
じつは、統計検定2級では回帰モデルの解釈の問題でRの画面が登場します。
lm関数のsummaryで表示されるCoefficients(回帰モデルの係数)の部分です。
将来的にRを使う予定でしたが、こんなに早く出てくるとは、驚きました。
Rの勉強もしなきゃ、ですね。

最後までお読みいただきまして、ありがとうございました。


のんびり統計シリーズの記事

次の記事

前の記事

目次

この記事が気に入ったらサポートをしてみませんか?