外れ値

総務省統計局の公開している「家計調査(家計収支編) 時系列データ(二人以上の世帯)」のデータを分析します。

import japanize_matplotlib as jm
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

data = pd.read_csv("./支出金額_加工済みデータ.csv", index_col="日付")
data.index = pd.to_datetime(data.index)
data.head(10)
消費支出傾向変動傾向変動調整分季節変動調整分
日付
2000-01-01105.629546107.63941197.99013515.539775
2000-02-0199.161881107.53083491.63104727.053064
2000-03-01114.404119107.423056106.98106237.116344
2000-04-01114.381944107.316075107.06586849.897649
2000-05-01105.269625107.20988798.05973857.430118
2000-06-01101.544867107.10448994.44037867.189765
2000-07-01111.381122106.999877104.381245712.401256
2000-08-01105.756457106.89604898.86040986.583948
2000-09-01101.138548106.79299894.34555095.993986
2000-10-01105.483531106.69072698.792805106.125017
sns.set(rc={"figure.figsize": (15, 8)})
jm.japanize()
sns.lineplot(data=data, x="日付", y="季節変動調整分", label="季節変動調整分")
plt.show()

png

異常値を検出してみる

DHI/tsodを用いて異常値を検出してみます。

import tsod

magd = tsod.DiffDetector(direction="positive")
series = data["季節変動調整分"]
magd.fit(series[0:10])

res = magd.detect(series)
plt.figure(figsize=(16, 4))
plt.plot(series)
plt.plot(series[res], "ro", label="Anomaly")

for d in series[res].index:
    plt.axvline(d, alpha=0.5, linewidth=0.75, color="k")
    plt.text(
        d + pd.DateOffset(10),
        10,
        f'{d.strftime("%Y/%m/%d")}',
        rotation=90,
    )
plt.legend()
plt.show()

png

ピークの点付近にあった出来事

2000/12頃

日本経済は、2000年10月に(1)景気の山を越え、景気後退局面に入った。その後、2001年を通じて、生産は大幅に減少するとともに、失業率も既往最高水準を更新し、景気は悪化を続けた。(経済財政白書/経済白書 > 平成14年度 年次経済財政報告

2014/03頃

2014年の消費増税時を振り返る データから見えた消費への影響と小売店の対策とは?

2019/10頃

2019年10月に消費税率は10%になりました。 | 財務省

2020/06頃

都道府県をまたぐ移動、6月19日から全国的に緩和