この記事では時系列データに対する介入の効果を時系列予測モデリングと差分の差法を組み合わせて簡便に分析する方法を紹介します。
時系列データの予測について
言うまでもなく、売り上げ高やサイト訪問数といった何らかの数値の推移に対して未来のことを予測することは大変難しいです。しかし、過去と似た状況では同じ結果が起こると言うことがデータから読み取ることができれば、未来予測が可能かもしれません。言い換えると、
- トレンド
- 増加や減少、一定水準の継続などの全体的な方向性。
- 周期性
- 24時間周期、1週間周期などの繰り返し起こる変動。
- 外部要因
- 気温が上がるとアイスクリームの売り上げが増える、と言った外部からの影響。
- ノイズ
- 上記に当てはめられない全ての要因による変動。
と言ったものを過去のデータから数式に落とし込むことがモデリングであると言って良いでしょう。
ただし、もれなくダブりなく要素分解できるのが理想なのですが、トレンド・周期性・外部要因の因果が相互に絡まっている場合はモデリングが困難になります。例えば、気温が上がっていく季節だからトレンドが発生しているような場合、要素としてトレンドと気温のどちらを使うのかというのを決めきれません。
が、これ以降は難しいことは考えずになんやかんやモデリングが完了したとして進みます。PythonでやるならStatsmodelsやProphetなどいろいろな選択肢があります。
差分の差法
同じような推移の二つの時系列データの片方に何かの介入を行うとき、介入を受けた方だけにその効果が現れるとすると、その効果の量を見積もることができます。
例えばこんな状況です。以下の表はA店・B店でのある商品の売上個数で2020/2ではB店で販売促進しているといったことを考えてみます。A店・B店は規模は違うものの概ね同じ割合で増減することが過去のデータからわかっているとします。
売上個数 | 2020/1 | 2020/2 |
A店 | 20 | 30 |
B店 | 40 | 70 (予測:60 = 40 * 30 / 20) |
B店の2020/2の売上個数をA店の推移から予測すると60個(+ 50%)となりますが実際は70個でした、とすると10個分は販売促進の効果だと言えます。
つまり、差分の差とは時間経過による差分の、介入有無それぞれで考えたときの差という考え方です。例で言うと、介入無しでの時間経過で+20個の差分があって60個、介入ありで+30個の差分があって70個と言う数字が得られたので、二つの差分の差ということで10個ということになります。ただし、因果推論の根本的な問題として「介入有無のそれぞれ」は同時に実データとして得ることが不可能なので、片方を予測で代用しようというわけです。その予測を上記のように参照データから得るか、時系列予測モデルから得るかは、課題設定や取得データ、仮定などによります。
時系列予測+差分の差による介入効果の推移
差分の差法において、介入がなかった場合の予測を時系列予測で行うことにより介入効果を時系列で追うことができます。ただし、上記のように単月で評価するときには、無視できたことが推移で見るときには無視できなくなることもあってなかなかに厄介です。
- モデリングの評価・過学習
- 時間経過による予測誤差の増大
- ノイズの扱い