Lean Analytics ―スタートアップのためのデータ解析と活用法
Lean Analytics ―スタートアップのためのデータ解析と活用法 (THE LEAN SERIES)
- 作者: アリステア・クロール,ベンジャミン・ヨスコビッツ,林千晶,エリック・リース,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/01/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
スタートアップ、新規事業開発での
分析について、成長フェーズ毎について、
分析や事例について語られている。
- データだけでなく、経営者の直感やユーザーへのヒアリングなども重要。
- 大企業でも、スモールスタートが基本。
- 特に大企業では、エグゼクティブのサポートも重要。一匹狼はよろしくない。
- 課題を見つけることが重要で、ユーザーとともに、成長していく方針。
- 仮説検証を、きちんと繰り返すことが重要。
- kpiは多すぎると、コストがかかりすぎる。
- 最重要指標を、きちんと決める。
リーンキャンバスなどのフレームワークは、
再読して試したいし、
内容も、難しかったので再読する。
Julia on Visual Studio Code
Juliaを使いたいけれど、Jupyterを使うのはなぁ。。。使いにくい。
Browserだから、ショートカットとかChromeのショートカットと干渉して嫌だなとか、
何かもっさりした動作が嫌なので、他に試してみようと思ったのが、Visual Studio Codeです。
拡張機能:
*Julia
補完とか効く。
*Code Runner
Ctrl + Alt + N で実行できる。
*Japanese Langage Pack for Visual Studio code...
日本語打てる。
*vim
vimが使える。
*emacs
emacsが使える。(一部設定されていないものある。自分で設定もできるみたい。)
標準機能:
*表示タブから、水平分割可能
とけっこう便利。Ctrl+Alt+nで実行。Ctrl+Alt+mで中断。
Plotは、画像として保存する様にしている。時間かかるけれど。
環境設定が簡単で、起動も、2秒ぐらいで軽快だったので、気に入りました。
ロジスティック回帰①
ロジスティック回帰をやってみる系の投稿って多いけれど、
細かいこと気にすると、難しそうだよねって思ったので、
実際に確認してみた。
以下、サンプルが完全に分かれる場合。
import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm from sklearn.linear_model import LogisticRegression from sklearn.cross_validation import train_test_split def threshold_line(constant, coef, x): return -(constant+coef[0]*x)/coef[1] def make_date(): # init value constant = 30.0 coef = [12.0, 5.0] npar = len(coef) nsample = 8000 # make data # x = np.random.randn(npar, nsample) x = (np.random.random(npar*nsample)-0.5).reshape(npar,nsample)*5 output = 1/(1 + np.exp(-(np.dot(coef,x) + constant))) # + np.random.uniform(-0.48, 0.48, nsample) output = output<=0.5 return (x, output) if __name__=="__main__": x,output = make_date() X_train, X_test, y_train, y_test = train_test_split(x.T, output, test_size=0.5) lr = LogisticRegression(penalty='l1') lr.fit(X_train, y_train) X_plot=X_test Y_plot=y_test line_x = np.array([np.min(X_plot)-1, np.max(X_plot)+1]) line_y = threshold_line(lr.intercept_, lr.coef_[0], line_x) plt.plot(X_plot[Y_plot>0.5, 0], X_plot[Y_plot>0.5, 1], 'xr') plt.plot(X_plot[Y_plot<0.5, 0], X_plot[Y_plot<0.5, 1], 'xb') plt.plot(line_x, line_y, 'k--') print(lr.score(X_plot,Y_plot)) print(lr.score(X_train,y_train)) print(lr.coef_) print(lr.intercept_) print(sum(Y_plot),Y_plot.shape[0]-sum(Y_plot)) plt.axis([-3,3,-3,3]) plt.show()
上手くフィット出来ている。。。
以下は、constant(intercept)=39にしてみた結果。
赤 16, 青 3984
になり、上手くフィットできない。。。
この例だと、1:100ぐらいのサンプル数になると怪しくなる。
サンプルによっては、1:10ぐらいから、怪しくなると思われる。(サンプルを正規分布にすると、変わった。)
サンプルが大きい青の方に合う様にフィットするために、
境界線が、赤のサンプル側に移動している。
class_weight='balanced'というオプションによって、
最尤法を使う際に、weightをかけて、フィットしてくれるみたいだが、上手くいかない。。。逆に青いサンプル側にずれる。
lr = LogisticRegression(penalty='l1',class_weight='balanced')
ペナルティは、L1, L2。L2にすると、たぶん、正負のバランスが悪すぎると、効果が小さいので、係数決定が不安定になるのではないか。
また、class_weightは、過剰に効きすぎる傾向があると分かった。。。
ベイズとか使ってやると、サンプルが無いので上手く表現してくれるのか?
とか、思ってきたので、次に、やってみる。