2ヶ月ぶりの更新です。
書きたいことは色々あったのですが春学期は死ぬ程忙しかったので
中々書けませんでした。笑
とりあえず一週間前に無事MBAを卒業しました。
最終学期の授業の成績はまだ全部出てないので
厳密にはまだ卒業出来てるのかわかってませんが、
きっと大丈夫…なはずです 笑
卒業/MBA総括関連の話はまた次回以降書きますが、
卒業して時間がたっぷりできたので、
まずはこれまで溜まっていた書きたいことを書いていこうと思います。
今学期は(facebookでそういう話ばかりしてたので 笑)
MBAのキャンパスで友達に会うとHealth Analyticsの話をよく聞かれました。
この授業が、今学期がMBA生活の中で一番忙しかった主原因なのですが、笑
その分学びも多かったので、たまにはMBA行ってる人らしく、
その学びのいくつかを備忘の意味も含めて書いてみようと思います
Regression in Agile Setting
はい出ましたアジャイル 笑
まぁタイトルのチャラさは置いておいて、
今回のメイントピックは、regression(回帰分析)です。
まずはregressionを知らない人向けに超簡単にregressionの説明をします。
(Wikipediaのリンクを貼って終わりにしようと思ったのですが、
Wikipediaの説明、専門用語が多過ぎて小難しかったのでやめました 笑)
Regression – Basics
regressionは一言で言うと
「2つ以上の要素の関係性を方程式で表す」方法のことです。
例えば東京の気温と湿度のデータ(何度の時に湿度何%だったか)をいっぱい集めて
そのたくさんのデータを元に東京の気温と湿度の関係を
湿度(%) = a + b × 気温(℃)
という方程式で表しますというのがregressionです。
ただ、東京に住んだ方なら想像がつきやすいかもしれませんが
同じ気温でも、例えば梅雨と秋では湿度が全然違うので
上記方程式で一意に気温から湿度を求めることはほぼ不可能です。
なので、イメージとしては下記図のように
複数のデータの点たちから”一番無難な”(誤差の合計が最も少ない)線を引いて、
その線の方程式を求めるという感じです。
上記図から明らかかもしれませんが、regressionは発想として
「方程式にあてはめれば全ての点がピンポイントで当たる」ではなく
「方程式を使ってだいたい全体的に近い予測をする」ものです。
なので、この引いた線が全体的に
どのくらい実際の点に近いかを測るための値があって、
その値を元にregressionの全体的な精度を判断します。
その値の中で最も有名なのがR^2(決定係数)です。
R^2は普通のregressionでは0〜1の間の値をとり、
1に近い程regressionの精度が高いと判断します。
また、引く線も必ずしも直線とは限らず、
下記図のように気温の二乗や三乗、ルートやログ等を使うことで
曲線にすることも可能です。
…と、基本はこんな感じです。
UCLAのMBAでもregressionは
Statistics, Data Analytics, Marketing Analytics, Customer Analytics
等の授業で習ったのですが、
全ての授業で、数万件単位のデータセットでregressionを行って
教科書通りで誰が見ても正しい、”綺麗な分析”をするという
“大企業で特に真価を発揮する”使い方を扱っていました。
What I mean by “agile”
上記使い方ができるのは、大量データを集められることが大前提です。
多くの場合、それは自前なり他人の(API等含め)なり、
ある程度のユーザーベースのある製品が既に存在することを意味します。
また多くの場合、使用するデータに相関があることは既にわかっていて
いかに多次元のモデルを使って予測の精度をあげるかが焦点になります。
ところがHealth Analyticsでは、プロジェクトの内容が
「まだ世の中に存在しないヘルスケア製品を作る」だったので、
データを大量に集められる製品は存在せず
データに相関があることもわかってなかったので
そもそも大前提の仮説の方向性が信じるに足るかどうかを立証することが
焦点でした。
なのでMBAで習ったregressionと同じモデルを使ってはいるのですが、
結構モデルの改善の仕方や解釈の仕方は違いました。
…と、ここまでが非常に長い前置きです。笑
基本的にHealth Analyticsでは教授は何も教えないので
某六本木/虎ノ門にあるワークスなんとかとか言う会社と同じで
全部試行錯誤して自分で勝手に学ぶのですが、笑
そんな試行錯誤してる中、なんとなく上記違いに気付いて
それに応じて学んだことがいくつかあるので、つらつらと書いてみます。
Takeaways
- Power of Linear Model
データ数の少ない段階においてLinear Modelは強力です。
僕らの使ったデータセットでも多次元モデルはoverfittingしてしまい
使い物にならなかったです。
これはLinear Modelは直線なので2点を結ぶ線は一通りしかないのに対し
多次元モデルでは曲線なので2点を結ぶ線が何通りもあることに
起因してます。なので多次元モデルでは使用データが少ないと、
ほとんどの点に近いところまで線が来れるので
全体の傾向を掴むよりも既存の個別の点に集中し過ぎてしまい
regressionの精度を表す値(R^2等)が異様に高くなり、そのわりに
新しいデータで同じモデルを試すと全然見当違いの予測になります。
Linear Modelは直線ゆえに単純で精度も粗いですが、
曲線(多次元モデル)の方がより正確に近似できるケースでも、
多くの場合(曲線程ではないにしろ)相関の有無が判断が出来るレベルでの
近似はできます。
なのでProof of Conceptの段階ではLinear Modelは非常に有効です。
また、当たり前ですが上記Overfittingしたモデルの誤用を避ける意味で
Validation(作ったモデルをモデリングに使ってないデータでテストし
その結果を精度の判断に使うこと)も超重要です。
当たり前/超重要の割に意外と忘れられがちで、
Health AnalyticsでもValidationしてなかったチームが2チームいて
教授にピッチでボコボコにされてましたし
他の授業で扱った某投資銀行が発表したカントリーレポートにも
明らかにValidatonしてないモデルが載ってたりしました 笑
- Power of Weighting
上記Linear Modelと結構密接に関係しているのですが、
そもそも曲線で近似すべきところを直線で近似すると
下図のように精度がいいところと精度が悪いところがでてきます。
低い値と高い値になればなる程精度が悪くなる傾向があるのですが、
ここで考えるべきなのは、
「はたして全ての値の精度が等しく大事なのだろうか?」
ということです。
先ほどの気温と湿度の例で言うと
例えば0%も20%もどっちもカラッとしてると感じるし
80%も100%もどっちもムシムシしてると感じるけど
40%と60%では湿度の体感が劇的に変わるのであれば
80%のところを間違えて100%と予測してしまうことは
40%のところを間違えて60%と予測してしまうより
どうでもいいことかもしれません。
もしそうなのであれば、regressionの際に
50%に近い点をより重要視して
25%未満や75%以上の点を軽視する方が、
より意味のある予測になります。
weighting、僕らのプロジェクトでもとても役に立ちました。
- Power of Classification
これも上記に関連しているのですが、Weightingと同じロジックで、
もし高い値と低い値の予測があまり重要ではなく、
かつ予測精度も低いのであれば、
最終的なアウトプットは予測した値を直接出すことをやめて
特定のThreshold(湿度の例だと50%とか)を設定して
その値より高いか低いかを表示した方が
アウトプット自体の精度が圧倒的に高くなります。
Thresholdを一個だけおいて高/低で表したり
二個おいて高/中/低で表したりというアウトプットの単純化も、
特にHealth AnalyticsのプロジェクトのようなProof of Conceptの段階では
非常に有効でした。
それに伴って精度判断に使う値も、
regressionの線全体の精度を測るR^2よりも
Classificationの結果の精度判断に使うconfusion matrixを
重視するようになりました。
- One more thing… Beat the invisible giants
もう一個の学びは若干番外編なのですが、
「Computer Scienceの大学院生も必ずしもData Savvyとは限らない」
ということでした 笑
チームはボク以外にComputer Scienceの大学院生が2人いたのですが
2人ともregressionをちゃんと理解してませんでしたし、
feature selectionもできませんでした。笑
おかげでモデリングの全部をボク1人で担当できたので、
(同じ理由でモバイルアプリもボクが1人で作りました 笑)
とてもよかったですが… 笑
他のプロジェクトには明らかにちゃんと出来てる人もいましたが、
40人中4,5人という印象でした。
ほぼ全員Machine Learningの授業履修者だったはずなのですが…笑
ということでまた一つ
「きっとComputer Scienceの人達は全員超凄いんだろうな〜」
という見えない巨人の幻想が消えました。笑
ということで、Health Analyticsのテクニカルな学びでした。
少ないデータでいかにコンセプトを証明するかという観点で
モデルを選んだり、input featureを絞ったりするのは新しい経験でしたが、
たぶん今後、同じように新しい製品を作る際に頻繁に行うことになる
気がするので、大事な学びだったと思います。
Health Analyticsは今まで受けてきた授業の中で
一番InnovativeでEntrepreneurialだったので
テクニカル以外の部分でもうちょっと深い学びもある気がしますが、
それはまた考えを整理してから別途ログにしてみようと思います。