データサイエンスブートキャンプ
Exploratory
tableauとどう違うんだろう
二日目はモデリング
回帰・ランダムフォレスト
ロジスティック回帰が結構峠
-.icon
データサイエンスは2タイプ
意思決定
Decision Science
意思決定しやすいような役立つインサイトを提供する
統計が強い(学校では教えられない人が多い)
データを使ってプロダクトを作る
Data Product
レコメンドエンジンとか
コーディングが強い
メンテナンスを気にする
この人が増えてる
-.icon
Data wrangling - データの前処理
平均・中央値・最頻値・分散・標準偏差・偏差値についての基礎知識おさらい
ヒストグラム、エラーバー、バイオリン図、箱ひげ図の見方をやった
標本誤差
複数のサンプルを無作為に抽出したときの、サンプルごとの誤差
中心極限定理
普通に1人ずつ取ってきてヒストグラムを作るとカクカクになる
10人、20人、30人取ってきて…とやると段々と平均に近づいてくる
Nを無限大に持っていくと正規分布になる
フィラデルフィアの高校の実態調査の話面白かった
中心極限定理が効いていて人数が多いと平均に近づいているだけだった
帰無仮説
Z検定 / t検定
Z検定: 正規分布で、返金と標準偏差を使って重なり合いをベースに検定する
t検定: 平均の差を用いて、検定する
結局は、そのデータの平均や分布の重なり合いを見て、判断するのが良い
つまりすごい大きな平均の差があるなら標準偏差が大きくても判断できるけど、
小さな平均の差を検証したいなら、標準偏差が小さい(たくさんのデータ)が必要。
信頼区間で直感的に考えるのが良い
p値
table:p
違いがある検定結果 違いがあると言えない検定結果
本当は違いがある 正しい結果。 タイプ2エラー
本当は違いがない タイプ1エラー(ここが起こる確率がp値) 正しい結果。
サンプルが十分かどうか。↑のタイプ2エラーが起こりそうかどうか。起こさないためにどれくらいのサンプルがほしいか。を調べる
p値hack: データをめっちゃ増やすと小さい差でも有意差があると言えたりする。これはやばい。
平均の差を標準偏差で割る。
Small: 0.2, Mid: 0.5, Big: 0.8
0.1があれば深ぼってみてよい
差がばらつきに対してどれくらいなのか。という指標。
Q. 効果量って結局どれくらいの差がありそうかっていうのは言ってないのでは?標準偏差はサンプル数が増えれば小さくなるのでサンプル数を増やせば効果量は増えるということにならないか。
サンプル数を増やしたとしても標準偏差は小さくならない。中心極限定理の話は「平均したときに」どんどんばらつきがなくなってくる。という話。
サンプル数を増やすと、むしろ標準偏差は増える可能性もある。
2つのカテゴリが独立か?を検証するもの。
カイ二乗値を出す。カイ二乗分布と比較する。
-.icon
軸をふたつとって、一方が上がれば、一方も上がる(その逆も)
ピアソンの積率相関係数 => 正規分布を仮定している
スピアマン => 正規分布でなくてもよい
すべてのデータを順位づけする
順位で相関関係を見る
ロングテールなデータは、対数に割り当てて見ると正規分布になったりする。
https://gyazo.com/9433bc15eb37c72fa09752f3643d3005https://gyazo.com/91337a6750e6cdb7b412f499dfc7e075
対数かけて、相関関係と言ってよいか
expかければよいわけで、そうすればモデルが作れるので、相関関係と言ってよい
Association / Correlation
P(確率|条件)
P(A|B) = P(A) => AとBは独立している(Bが入ろうが入らまいが、変わらないので。)
P(A|B) = P(A|not B)でもよい
Confounding(交絡)
P(X|A) P(Y|A)が独立じゃなかったときに、XとYが相関があるように見える
本当はAが原因
例
アイスクリームが売れるとサメと遭遇する
熱いからアイスクリームが売れ、熱いからサメと遭遇する(人が海に入るからとか、サメが来るから、とか)
データはばらつくので、不確実性が高い
相関が分かれば、予測しやすい
変化を説明しやすくなる
相関があったとして…
どれくらい注目すべきなのか?
どれくらい説明できているのか?
を知りたい => 線形回帰
予測対象の値を、複数の変数から予測する。
y = a1 * x1 + a2 * x2 + ... + b
数値としてインプットするのと、カテゴリーとしてインプットするので、違いがあるか
Job Levelなんかだと、1→2, 2→3, 3→4が等しく難しいわけではないこともある。
そういう場合はカテゴリーで比較したほうが良い。
すなわち、1→2, 1→3, 1→4で比較する。
R^2値
どれだけ予測モデルが説明できているかを、平均・実態と比べる形で計算する。
R-MSE: 予測精度を図るのに使う
予測に使うのか、インサイトを得たいのか(相関関係があるかを見たい)によって結構異なってくる。
R^2が0.2とかであっても、とはいえこれで20%くらいは説明できるとも言える。
ただ、これを予測に使うと困ることも多い。
データ数を増やすと、信頼区間が狭くなる可能性が高い。
データの増え方によっては、R2が高くなることもあるし、低くなることもある。(どれだけばらつくか。)
サンプルをいじりながら、線形回帰した時の値の変化を観察してみるのは面白そうだなとおもった。
まずはP値やエラーバーを見てみる。相関がありそうだったらR2を見て、モデルが確かそうかみてみるのがよい。
https://gyazo.com/3d4309921d3457a74dfcbbeeea6b8346
Manufacturing Directorは、勤続年数が効きそうだ。Laboratory Technicianは勤続年数そんなに効かないのかもしれない。みたいな考え方もできる。
重回帰
「他の変数が変わらない」というコンセプトが非常に重要
多重共線性
ある予測変数が、他の予測変数で求められてしまうこと
係数と切片の値が定まらなくなる…。
予測結果には関係ないが、分析のときに係数が定まらないと、一体どれが効果になるのかっていうのがわからない。
検出する方法
ある予測変数から他の予測変数を導いてみて、R^2を求めてみる
https://gyazo.com/8f6a1464544b576e0c4f9eb83b6c57b0
Job RoleとDepartmentは関係がありそう
階層的な関係がある変数はVIFが高い場合が多い
-.icon
重回帰分析をしても、単位が違うので比較できない。どうするか。
変数を標準化する
R Squaredを使った変数重要度
調整済みR二乗
予測変数の数を増やしたことをペナルティとして、R^2値を小さくする
厳選すればR^2アップ
-.icon
ロジスティック回帰
logistic(a * Mother_Age + b)
ここでの帰無仮説
このモデルは、予測したい値と関係ない。
オッズ
TRUEの確率 / FALSEの確率
オッズ比
変数の値が1増えると、オッズがどれくらい増えるか。
線形回帰のときは、1増えるといくつ増えるか。だったけど、今回はオッズがどれだけ増えるか
N * N * N * N ... という感じ。
平均限界効果
傾きの平均
再現値(Recall)
Trueというべき人に、ちゃんとTrueと言える割合(正解の割合)
適合率(Precision)
全体の正解の割合(Recallに、FalseのときにFalseという、も含める)
F値
RecallとPrecisionの平均。1に近いほどいい。
これが上がってほしい。
使い所
登録するかしないか
ロイヤルカスタマーかどうか
返品するかどうか
2個の問題に落とせれば色々できる
日本かどうか
モデルを作ることで、関連性、分析して因果関係を深堀りとかができる。
統計と機械学習の違い
統計だとp値とか、色々加味して判断できる。パラメーターを揃えて因果関係を調査していくみたいなことはやりやすい。機械学習だとそういう問題にアプローチするのが少しむずかしい
データが不均衡だとタイプ2エラーとかが発生しやすい。
多数派のデータはサンプリングして減らし(アンダーサンプリング)
少数派のデータは合成して増やす。(オーバーサンプリング)
-.icon
決定木がベース
決定木をランダムにサンプリングしたデータで生成して、いくつも作る。結果を平均化する
不純度: Gini Impurity
取る値: 0~1
どれぞれのノードのデータに、どれだけ値が混ざっているかを表す指標
例えば、AかBを判断するなら、
1 - (Aの数/N)^2 - (Bの数/N)^2
ボルータ
どこまで変数が重要と考えるか
各列の値をランダムに並び替えて、シャドー列を作る。予測にはなんの貢献もしないはず
シャドー変数の一番いいやつに負けるようなやつはやめちまえ!
ランダムフォレストはなにが変わったかとか、中身がわかりやすい。分析に便利。
ランダムフォレストにかけて変数重要度を見れば、あたりを付けやすい
複数のモデルに学習させて、それぞれの予測結果を一つにまとめる
ランダムフォレストと考え方は同じ
一回目に作った木で予測を間違えたデータ(残差がたくさんある)を取ってきて、そのデータをより重点的にサンプルする。
-.icon
変数が、イベントが起こるまでの時間にどのように影響するかの分析
例: いつ死ぬか、いつ辞めるか、いつアップグレードするか
時間を予測しているわけではない
打ち切り
Q
プロダクトはリリースされていくと思うので1ヶ月目。とざっくり揃えちゃっていいものなのか
一月ごととかで繰り返して計測してしまえばOK
どうやったら上げられるのかを知りたいわけなので、コックス回帰を使ってみる
ハザード比 - あるイベントが発生する確率の比
-.icon
仮説の検証
確かそうか確かめる道具。p値とか。
線形回帰やカイ二乗検定など。
変数間の関係を理解
興味の対象の変数になにが影響しているのか?(売上を上げたい、キャンセル率を減らしたい。)
予測対象によって色々使う。数値、カテゴリー、生存率 + 時間
ランダムフォレストであたりをつけてみる
変数重要度とか、予測影響度を見ればよい
値
ランダムフォレスト
R^2 - どれだけばらつきを「説明できているのか」
論理値の場合は、予測マトリックスを見る。あるいはF値(Precision + Recall)。
Recall: 「正解」をどれだけ当てられたか(タイプ2エラーが出ない割合)
Precision: Trueと推測したものが、どれだけ当たっているか。(タイプ1エラーが出ない割合)
Q. オッズ比って必ず変わらないんだっけ
変わらない。そういうふうに曲線ができてる。
-.icon
売上を伸ばす
月あたりの購買額を伸ばすには?
目的変数: MonthlySpending
Age
EliteStatus
WineClass
Wine Countiesは特に強い
1年以内に離脱する顧客にはどのような特徴があるか分析する。
手がかりがあったら、is_hogeとかでまとめてあげるとわかりやすい
例: 週4回以上WineClassに行ってる人