04.5.1 高校生向け
移動平均と移動標準偏差(高校生向け)
こんな場面を想像してみよう #
スマホの歩数を 200 日分、毎日記録したとします。折れ線にすると、部活のある日は多く、休みの日は少なく、テスト期間はがくんと減る……と線は毎日激しく上下します。「この半年で歩く量は増えた? 減った?」と聞かれたら、ギザギザの線のどこを見れば答えられるでしょうか。
灰色の細い線が元のデータで、毎日の上下が激しく流れが読みにくい。青い太い線は 14 日移動平均で、ギザギザが消えて「ゆるやかに上がりながら、20 日ほどの周期で波打っている」ことが見えます。水色の帯は移動平均に移動標準偏差を足し引きした「平均 ± 標準偏差 1 つ分」の範囲で、広いところほど値が荒れています。
仕組み:窓をずらしながら平均をとる #
まず窓の幅を決めます。図では 14 日で、「何日分をひとまとめにして平均するか」を先に決めるのがこの一歩です。次に最初の 14 日分の値を平均し、窓の真ん中の日に点を打ちます。「多い日」と「少ない日」が打ち消し合って、1 つの落ち着いた値になります。それから窓を 1 日ずらして同じことを繰り返すと、点がつながって青い線になります。ギザギザはどの窓の中でもプラスとマイナスが相殺されて消え、ゆっくり動く部分だけが残ります。同じ窓で標準偏差も計算し、「移動平均+標準偏差」と「移動平均−標準偏差」を上下に塗ると水色の帯になります。窓の中の 14 個の値が散らばっている時期ほど帯は広がります。最後に読み方です。青い線の傾きがトレンド、帯の広さがばらつきの大きさを表します。
7 日分の値を幅 3 の窓で平均すると、元の値は 9〜16 の間で跳ねるのに、移動平均は 11〜14.3 に収まります。これが「なめらかになる」の中身です。下の短いコードがその計算を 5 回分そのまま行います。
| |
動かして見てみよう #
下の図で「再生」を押すと、説明した手順が 1 つずつ進みます。手順ごとの説明は図の下に出ます。
気をつけたいこと #
最初の注意は、窓を 30 日、60 日と広くしすぎると大事な変化も消えることです。急に伸びた日も「少しずつ上がった」ように見え、山の位置も遅れるので、元の線と必ず重ねて見ましょう。二つ目は、両端の 7 日分は計算できないことです。幅 14 の窓を真ん中に置くと最初と最後の 7 日分は移動平均が描けず、図の青い線が灰色の線より短いのはそのためです。三つ目は、帯の中に 200 日分すべての点が入るわけではないことです。帯は「平均 ± 標準偏差」の目安で、はみ出す日は 3 日に 1 日くらい普通にあるので、「はみ出した=異常」と決めつけないでください。最後に、青い線がずっと傾いているなら平均そのものが時間で変わっているサインです。予測の前に差分などでトレンドを取り除くことを考えます。
やってみよう #
最初の課題は、10 日分の数字(歩数・小テストの点など)を紙に書き、幅 3 の移動平均を手計算して、元の折れ線と重ねて描くことです。移動平均の点が 8 個しかできないことも確認しましょう。二つ目は、身の回りで「曜日のせいでギザギザする数」を 2 つ探すことです(学食の混み具合、SNS の投稿数など)。そのギザギザを消すには窓の幅を 7 日にすればよい理由を説明してみてください。三つ目は、運動会の日だけ歩数が 3 倍になったら、その日が窓に入っている 3 日間、移動平均と帯はどう変わるかを予想することです。予想したら課題 1 の表に極端な値を 1 つ入れて確かめましょう。
つぎに読む #
pandas の rolling() を使った計算と描画のコードは標準版の移動平均と移動標準偏差で扱っています。増減率の棒グラフに移動平均の線を重ねて「勢い」を読む方法はパーセント変化の推移(高校生向け)へ進んでください。移動平均で取り出したトレンドを、季節の波・残りの部分と分けて見る方法は季節成分とトレンドの分解(高校生向け)で説明しています。