渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

「毎日の数字を追いかけ、毎日改善する」ことの意外な落とし穴

(※今回の記事の内容はかなり難解かもです)


得てして多くの企業では、「毎日の数字(売上高・利益・在庫etc.)を追いかけ」、「その結果を元手に毎日改善する」ということを日々励行しているのではないかと思います。


ところで、こんな体験したことはありませんか?


「毎日毎日、物凄く一生懸命数字を見ながら頑張ってカイゼンし続けて、確かに頑張った時は数字は上がったし、頑張りが足りない時は数字が下がった。それに一喜一憂しつつもずっと物凄く頑張り続けた・・・でも、あれからもう数ヶ月経ったのに全体としては数字は下がってきている。どうしてなんだろう???」


なるほど、もしかしたらその時の改善努力が正しくなかったのかもしれません。でも、実は「そもそも改善努力と数字とは何の関係もなかった」としたら、どうします?


そんなわけないだろう!と怒る人もいるかもしれません。けれども、現実にはそういう現象は起き得るのです・・・ある種の「錯覚」として。ここでは厳密性は度外視して、「データサイエンスの観点から見るとそういうこともあり得る」という与太話として書いてみます*1


経済学的に勝手に起きてしまう「錯覚」

平均への回帰

まず、一つ目が「平均への回帰」という現象。平たく言ってしまうと、「目の前の結果がいちいち良くなったor悪くなったと一喜一憂してそのたびに何かしら手を加えたとしても、実際には何の効果もない可能性がある」ということ。


これは最近「スポーツ指導と体罰」との関係を分析する上で出てきた話題です。冒頭1つ目のリンク先の、大竹文雄さんの記事にはこうあります。

あるスポーツ選手が、何かの技を練習している途中であるとしよう。何回も練習していると選手はだんだんうまく技ができるようになるが、時としていつもの技の水準よりずっとうまくできることがある。逆に、たまたま技がうまくできないときもある。たまたまうまくいったときは、その時の実力よりもうまく行ったのだから、次にその技を行うときは、いつもの水準に戻ると予測するのが、統計学的には正しい。逆に、たまたま技を失敗したときには、次の回にはいつもの技の水準に戻ってよりよい技を発揮できると予測するのが正しいのである。誉めなくても、叱らなくても、いつもよりよかった際は、次の回は平均的には前よりも悪くなり、いつもより悪かった際は、次の回には平均的には前よりもよくなるのだ。これは、指導の成果でもなんでもなくて、純粋に統計的な現象だ。
(強調部筆者)


この文章はたまたま「体罰」というネガティブなテーマについて書かれたものですが、これを例えばIT業界では往々にしてありがちなwebアプリのDAU改善になぞらえて、以下のように書き換えたらどうなるでしょう?

あるwebアプリが、DAUを増やそうとしている途中であるとしよう。何回も改善しているとアプリはだんだんDAUを増やせるようになるが、時としていつもの水準よりずっと高いDAUが出ることがある。逆に、たまたまDAUが低く出るときもある。たまたま高く出たときは、その時の真の人気よりも高く出たのだから、次にDAUの測定を行うときは、いつもの水準に戻ると予測するのが、統計学的には正しい。逆に、たまたまDAUが低く出たときには、次の時にはいつものDAUの水準に戻ってより高いDAUを示すと予測するのが正しいのである。改善しても、改善しなくても、いつもよりDAUが高かった際は、次の時は平均的には前よりも低くなり、いつもより低かった際は、次の時には平均的には前よりも高くなるのだ。これは、改善の成果でもなんでもなくて、純粋に統計的な現象だ。
(強調部筆者)


うわー、めちゃくちゃブラックなユーモアですね(笑)。でも、こういうことは実際にあり得る話だと現場感覚的には思ってます。特に、リリースしてすぐのwebアプリではなく、リリースからしばらく経ってDAUの変動がある程度プラトーに達したアプリだとありそうな気がします。


これは一種の「定常性」を前提にした議論で、要は(例えば)DAUというのはそうそうすぐには大きく変わらないものだという仮定です。実際にDAUの時系列データを見たことのある人なら、身に覚えがあるんじゃないでしょうか*2


そういうものが、毎日上がったor下がったからと言って、毎日その都度「改善がうまくいった」「うまくいかなかった」と一喜一憂して、その結果に振り回されてがむしゃらにカイゼンしまくったとしても、もしかしたらお互いに何の関係もなかった、だから数ヶ月経ったらカイゼンの効果の有無とは無関係にDAUは下がってしまったのかもしれない・・・というわけです。


もう少しはっきり書いてしまえば「毎日のDAUの値に一喜一憂しながら毎日カイゼンしていても、それらの改善に本当に効果があるかどうかはそのままでは分からない」ということです。改善すること自体に意味がないのではなく、ただ毎日一喜一憂していては効果の有無は分からない、ということですね。


見せかけの回帰

「平均への回帰」とよく似ていますが、これはもう少しテクニカルなお話です。


有体に書いてしまうと、「毎日変化する2つの数字があった時に、両方とも『前の日の分に今日の分を足していく』タイプの変化をする場合は、仮に両方とも全くのただのランダムな数字であったとしても、統計的に有意な回帰関係が生じてしまう」というものです。


こんな小難しい書き方では分かりづらいと思うので、ズバリ冒頭のリンクの2つ目の記事を見て下さい。これはまさにその条件を満たす、ランダムウォークというその名の通りのランダムな2つの時系列同士を回帰分析にかけた結果なのですが、物の見事に統計的に有意な回帰関係が生じています。デタラメな2つの数字同士であっても、それが「前の日の分に今日の分を足す」操作をするだけで、勝手にお互いに関連があるように見えてしまうのです。これが見せかけの回帰です。


ちなみにまさかと思う人もいるかもしれませんが、僕も弊社の最近の株価変動に対して同じようにランダムウォークを回帰分析で当てはめてやったところ、バッチリ見せかけの回帰が出てしまったという例を見ています*3


これは、後に2003年のノーベル経済学賞に輝いたSir Clive W. J. Grangerがモンテカルロシミュレーションから偶然発見した見せかけの回帰(spurious regression)という時系列の性質によるもので、簡単にまとめると

  • 2つの時系列があり
  • 両方とも「前の時点の値に現時点での値を足していく」(和分)ことで得られる値なら
  • 仮に両方ともランダムな値が割り当てられていたとしても、なぜか回帰関係を示してしまう*4

ことが分かっています。長年その理由は不明で疑問の声も多かったそうですが、1980年代に解析的に証明した論文が出てからは計量経済学の世界では広く受け入れられるようになったそうです*5


ところで、先ほど弊社株価の例を挙げましたが、一般に株価なり物価なりの経済指数や、消費行動関連指数は「和分」過程だということが知られています。ということは、おそらくDAUなんかも和分過程でしょう*6


で、問題はwebアプリの改善施策のような、いかにもインターネットビジネスにありがちなビジネスアクション。これも、「カイゼン」なのであれば基本的には「和分」なんじゃないでしょうか?前の日までのカイゼンに、今日のカイゼンを付け足していく、という。少なくとも感覚的には。


・・・だとすると、実は先ほどの「平均への回帰」と全く同じことが言えます。つまり、デタラメにただがむしゃらにカイゼンしていると、実際にはカイゼンに効果がないにもかかわらず、見かけ上はDAUがそのカイゼンのおかげで上がったり下がったりしているように見えるかもしれない、ということです。


これら2つの「錯覚」のせいで、webアプリのカイゼンの効果が分からなくなってしまい、長期的にはDAUの低下を招いてしまう・・・そんな経験をしたことのある方、少なくないのではないでしょうか。


データサイエンス的に見れば、少しはマシになるかも


もちろん、こういう難しい事態に手をこまねいているようでは、真のデータサイエンティストとは言えません。例えば「平均への回帰」に引っかかるケースでは、先ほどの大竹さんの記事にも

したがって、失敗した時に体罰を含めて厳しく叱ったら次回に成果がでるというのは、因果関係ではなく、平均への回帰が観察されているだけなのである。厳しく叱ったことで本当に成果が上がるのかどうかを識別するためには、同じ場面で叱らなかった場合と比べて、成果があがる程度が本当に異なるか否かを検証する必要がある。逆に、うまくいったときに誉めた場合に、誉めた効果があるかどうかを識別するのも難しい。誉めた次の回に、平均的に成果が下がる程度が、うまく行ったにも関わらず誉めなかった場合と比べて、どの程度小さくなるか、ということを検証する必要がある。
(強調部筆者)


というように、A/Bテストも含めて「実験的に」確かめることで、カイゼンに効果があったかどうかを調べるべきという対策が述べられています*7


また、「見せかけの回帰」については、実は単純に「差分」すれば良いことが分かっています*8。ただ、これを先ほどのDAUとの関連を調べるのにどう当てはめるか?というと難しそうです。ただ、DAUの「風速」の上下動(つまり上に凸or下に凸)を見るようにした方が、もう少し正確にカイゼン効果の有無を見ることができるかもしれない、とは思います。


本当はきちんとDAU及び改善施策の移り変わりに対して、カイ二乗検定やフィッシャー検定による適合度検定や、はたまたベクトル自己回帰モデル(ベクトル誤差修正モデル*9)・自己励起型閾値つき自己回帰モデルもしくはマルコフ転換モデルを用いた計量時系列分析を行った方が良いと思いますが、それらの話題はまた改めて*10


(※※共和分の説明に誤りがあったため、一部加筆修正してあります。文面を変えてしまい申し訳ないです)

(※※※続編があります。「見せかけの回帰について(そして単位根過程・共和分など)」

*1:猛烈に大雑把に書いているので間違いも多いかもしれません。ということで、何か間違いなどあればぜひご指摘ください

*2:例えば7日間移動平均値時系列とか、はたまたローパスフィルタにかけた後のDAU時系列とか見れば、大域的変動は1日2日では全然変わらないものかと

*3:しかもp < 0.001、r^2 > 0.7とか

*4:正確には2つの「和分」過程の和がやはり「和分」過程になるケースに限られる(ただしそういうケースはかなり多い)。ちなみに2つの和分過程の和が定常過程に従う場合は「共和分」関係と呼ばれ、見せかけの回帰は生じない。共和分関係にある2つの時系列は一種の均衡関係(要するに2つの和が一定値に収束する方向に動く)にあるので、これは別の意味で有益な知見となる

*5:ちなみにその論文は http://dido.econ.yale.edu/korora/phillips/pubs/art/a044.pdf で見られます 。専門家でもまともに全部読むのは辛いかも。。。

*6:厳密に(例えばRのforecastパッケージなどを使って)検証すると必ずしも和分過程でないこともありますが、概してそういうケースは多いです。特にまだ新規UUが流入し続けているアプリであれば尚更

*7:適切なサンプリング(検出力や信頼区間を考慮する)を行った上でのA/Bテスト、もしくはこれに類する実験計画法に基づいてきちんと整備された検証実験が望ましい

*8:これは超絶大ざっぱな議論で、厳密には1階差分すれば万事OKということはない

*9:時系列ベクトル間で共和分ランクが非ゼロの場合に、これを修正する項を入れることで反転可能にし、VAR的に表現できるようにしたモデル。RだとJohansenの方法が使える

*10:今回の記事は、ある程度統計学and/or計量経済学的な厳密性を犠牲にして、なるべく分かりやすく書いています。「お前それ適当過ぎやろ!」というツッコミはご勘弁下さい・・・ただし、明らかに学術的に見ても誤りという点があればぜひご指摘下さい