More Related Content Similar to Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう (20) Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう2. Copyright Shiroyagi Corporation. All rights reserved.
自己紹介
堅田 洋資
(データサイエンティスト@白ヤギコーポレーション )
日本では数少ない米国大学のデータサイエンス修士号を保有。
白ヤギコーポレーションにて、社内のデータはもちろんクライアントのデータ分析を
支援するコンサルタントとして活躍。
これまで機械学習を用いたレコメンデーション、アプリユーザーの行動分析や機械
学習を用いたプッシュ通知の最適化、交通系IoTのデータ分析などを担当。
白ヤギコーポレーション参画前は、監査法人トーマツにてデータ分析コンサルタン
ト、生体センサスタートアップでサービス・アルゴリズム開発の取締役、KPMG FAS
にて事業再生コンサルタント、外資系メーカーでの経理・マーケティングなど幅広い
経験を持つ。
学歴
● University of San Francisco, M.S. in Analytics修了
● 一橋大学商学部卒業(統計学・データサイエンス専攻)
メディア実績
• 日経ビッグデータWeb版パートナーレポート「成功するアナリティクス案件の選択とは http://business.nikkeibp.co.jp/article/bigdata/20141021/272866/
• SELECK 「数値からユーザー行動を読み解く! データ可視化のカギは、TableauとRの使い分け」 https://seleck.cc/article/286
• SELECK 「ビッグデータ分析を競い合え!世界中のデータサイエンティストが集う「Kaggle」とは」 https://seleck.cc/article/313
セミナー・トレーニンング
• 日経ビッグデータカンファレンス「世界最大級分析モデルコンペ Kaggleの最新動向」
• デブサミ2016 「人間と機械学習のはざま: どこまで機械に任せるのか」
• 大手コンサルティングファーム様社内トレーニング 「SQLを使ったデータ分析セミナー」
• 「文系ビジネスパーソンのための統計学入門講座」 など
3. Copyright Shiroyagi Corporation. All rights reserved.
講義を始める前に・・・
$pip install ipython
$pip install jupyter
$pip install numpy
$pip install scipy
$pip install pandas
$pip install scikit-learn
$pip install matplotlib
必要なライブラリは入っていますか?
入っていなければ、以下のコマンドで入れてください。
5. Copyright Shiroyagi Corporation. All rights reserved.
不動産仲介企業の新サービスを立ち上げろ!
• あなたは不動産仲介会社のデータサイエンティストです
• 商品企画部長から新サービスとしてユーザーが販売物件のスペッ
クを入力すると予想成約価格が出力される自動査定サービスを検
討しており、背後のアルゴリズムを検討してほしいと相談されました
• あなたならどうやってアプローチしますか?
10. Copyright Shiroyagi Corporation. All rights reserved.
ビジネスゴールから分析のゴールへの翻訳
ここでのビジネスゴールは?
- 自動査定システムを通じた物件売却の相談件数
では、分析に求められる要件は?
- できるだけわかりやすく・少ない入力(入力しやすい)項目で
- 精度の高い予測を行う
- レスポンスまでの時間は短く(瞬時に)
- 週に1回モデルの更新
などなど
12. Copyright Shiroyagi Corporation. All rights reserved.
講義ではできませんが・・・データの準備はとても重要
多くの場合、データセットは自分で作る必要があります。
どんなデータを用意するかはあなたの想像力・観察眼・仮説力にか
かっています。
原因になりそう
な変数1
原因になりそう
な変数2
原因になりそう
な変数N
・・・
住宅
価格
なにかしらの
関係性
(関数)
どんな要因で住宅価
格を説明できそうで
すか?
17. Copyright Shiroyagi Corporation. All rights reserved.
必要なライブラリをインポート
%matplotlib inline #グラフをインラインで表示させる
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot') # ggplot風のグラフ形式
まずは必要なライブラリをインポート & スタイルなどを指定します
ちなみに最初の”%matplotlib inline”がないとグラフがインラインで表示されません。
18. Copyright Shiroyagi Corporation. All rights reserved.
データの読み込み
#CSVの場合
dataset = pd.read_csv(“ファイル名”)
#TSVの場合
dataset = pd.read_csv(“ファイル名”, delimiter = ‘t’)
19. Copyright Shiroyagi Corporation. All rights reserved.
(参考)データベースからデータを抽出する
import pandas as pd
import pandas.io.sql as psql
import pymysql
con = pymysql.connect(host='XXX’,
port=3306,
user='user_id',
passwd='user_pass',
db='test',
charset='utf8',
use_unicode='true')
sql = “SELECT * FROM test_table”
data = psql.read_sql(con, sql)
MySQLであればpymysqlライブラリ(PostgreSQLであればpsycopg2ライブラリ)と
pandas.io.sqlを使えば、データベースからSQLを使ってデータを抽出することもできます。
21. Copyright Shiroyagi Corporation. All rights reserved.
各カラムの定義
カラム名 定義
id いわゆるID
date 販売日
price 価格($)
bedrooms ベッドルームの数
bathrooms バスルームの数
sqft_living リビングルームの広さ
sqft_lot 駐車場の広さ
floors 階数
waterfront ウォーターフロントか (0,1)
view ビューの種類(0,1,2,3,4)
condition 状態(1,2,3,4,5)
grade グレード(1~13)
カラム名 定義
sqft_above 地上階の広さ
sqft_basement 地下の広さ
yr_built 建築年
yr_renovated リノベーションの年
zipcode 郵便番号
lat 緯度
long 経度
sqft_living15 近所15件の平均のリビングの広さ
sqft_lot15 近所15件の駐車場の広さ
24. Copyright Shiroyagi Corporation. All rights reserved.
pandasのすごいところ2: データの操作が簡単
本日カバーする操作
● 行の指定
● 列の指定
● カラム間の演算
● カラムに対する一括関数適用
● ダミー変数作成
● フィルタリング
※上記は最低限です
26. Copyright Shiroyagi Corporation. All rights reserved.
欠損のチェックは少し面倒くさいが、それでも簡単なほう
col_names = dataset.columns
for col_name in col_names:
missing_num = sum(pd.isnull(dataset[col_name]))
print col_name, "; # of missing record: ", missing_num
missing_check = dataset.copy()
missing_check = missing_check.apply(pd.isnull, axis = 1)
missing_check.apply(sum, axis = 0)
27. Copyright Shiroyagi Corporation. All rights reserved.
欠損値への対応
#0で補完
dataset.fillna(0, inplace = True)
#平均で補完
dataset.fillna(dataset.mean(), inplace = True)
#中央値で補完
dataset.fillna(dataset.median(), inplace = True)
補完する
dataset.dropna(inplace = True)
欠損があるレコードを削除する
29. Copyright Shiroyagi Corporation. All rights reserved.
「特徴量」とは??
人によっては
● 特徴量
● 素性
● 変数、説明変数
● フィーチャー
● カラム(いう人いるかな)
● パラメーター(いままでひとりだけ)
と呼びます。
要は、
「説明したい変数」(これも人によって、被説明変数、ターゲット変数など呼ばれます)を説明
するための要因です。
30. Copyright Shiroyagi Corporation. All rights reserved.
精度の高いモデルを作るためには特徴量作成は必須!
集めたデータをそのまま使って、高い精度を達成できるモデルを作れることは稀
よって当初集めたデータにある特徴量を組み合わせて、新しい特徴量を作っていく、これを
Feature Engineeringと呼びます。
例)
近所の物件と比較した相対的リビング広さ度 =
sqft_living / sqft_living15
みなさん、他にはどんな特徴量を作りたいですか?
31. Copyright Shiroyagi Corporation. All rights reserved.
いよいよモデリング
改めて今回の目的は
「住宅のスペックから予想成約価格を出力する」モデルを作る
機械学習の種類
● 教師あり学習
○ 回帰問題(Regression)(ターゲット変数が連続数値)
○ 分類問題(Classification)(ターゲット変数がフラグ/ラベル)
● 教師なし学習
32. Copyright Shiroyagi Corporation. All rights reserved.
今回試すアルゴリズム
● 回帰分析 (LinearRegression)
● 回帰木 (DecisionTreeRegressor)
● ランダムフォレスト
(RandomForestRegressor)
33. Copyright Shiroyagi Corporation. All rights reserved.
教師あり機械学習のアルゴリズムで最低限抑えるべきポイント
● どんなターゲット変数がとれるか?
○ 連続値?
○ フラグ?
● 目的関数: 何を最小化/最大化させるのか?
● 関数の形は何か?
● パラメータは何か?その役割は?
● 解釈可能性(interpretability)は?
● 予測可能性(Predictability)は?
特徴量1
特徴量M
・・・ ターゲット
変数関数
35. Copyright Shiroyagi Corporation. All rights reserved.
小うるさいこと言うと
統計モデルとしての回帰分析の前提条件
• 誤差が平均0の正規分布に従う
• 誤差の分散が均一
• 誤差に系列相関がない
これらの前提条件が満たされない場合は、
回帰分析の推定結果は信頼できない
• 残差が平均0の正規分布に従う
• 残差の分散が均一
• 残差に系列相関がない
36. Copyright Shiroyagi Corporation. All rights reserved.
回帰木・・・の前に決定木とは
×
×
×
×
×
×
×
×
×
×
直
近
の
購
入
金
額
前月の訪問数
あなたは会員制ECサービスのデータアナリストです。今、前月の訪問数と直近
の購入金額から当月の解約したか(解約=1,継続=0)のデータがあります。この
データから来月以降の解約を予測するモデルを作りたいと考えています
ID
前月の訪
問数
直近の
購入金額
当月の
解約
A9542K 15 2,000 0
G4344H 1 0 1
Y4352U 5 980 0
N4205J 11 1,200 0
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
C4325P 32 0 0
39. Copyright Shiroyagi Corporation. All rights reserved.
引いた線を文章で表現すると・・・
もし(If),前月の訪問数が10回以上
かつ
もし(If)直近3ヶ月の購入金額が1,200円以下だ
と(Then)
解約しやすい
こんな文章になります。
さて、これをツリー構造で表すと
× ×
×
×
×
×
×
×
×
×
10回
1,200円
41. Copyright Shiroyagi Corporation. All rights reserved.
決定木とは
● ターゲットの変数: フラグ
● 目的関数: 純度(ジニ係数)
● 関数の形: ツリー(縦線と横線)
ターゲットの変数が「連続数値」の場合が回帰木
なので、目的関数が
● 二乗誤差
● 関数の形:ツリー
42. Copyright Shiroyagi Corporation. All rights reserved.
ランダムフォレスト
ID 購入 性別 年齢 …
3 あり 女性 31 …
6 なし 男性 24 …
: : : :
ID 購入 性別 年齢 …
1 あり 男性 35 …
2 なし 男性 28 …
5 なし 女性 42 …
5 なし 女性 42 …
: : : :
ランダムフォレストとは機械学習のアルゴリズムの一つであり、複数の決定木を用
いて予測を行う
ID 購入 性別 年齢 …
1 あり 男性 35 …
2 なし 男性 28 …
3 なし 女性 31 …
4 あり 男性 26 …
5 なし 女性 42 …
6 なし 男性 24 …
: : : :
: : : :
: : : :
OOB(Out-of-bag)
列もサンプリング
重複を許して
サンプリング
学習データ
サンプリング
されなかった
データ
決定木
を生成
この一連の流れを繰り返し、多
くの決定木を生成、つまり木が
たくさんある=森を作る
43. Copyright Shiroyagi Corporation. All rights reserved.
ランダムフォレスト
…
ID 購入 性別 年齢 …
101 ? 男性 42
102 ? 女性 36
103 ? 女性 27
: : : :
あり あり なし あり なし あり
多数決でID.101は
「購入あり」と予測
様々なルールを持つ決定木を用いて、それぞれで予測を行う
生成した決定木
入力すると
回帰の場合は各回帰木の出力の平均が予測結果となる
46. Copyright Shiroyagi Corporation. All rights reserved.
良い精度のモデルを得るためにやること
● アルゴリズムの選択
● 変数選択(Feature Selection)
○ 説明力の弱い特徴量を落とす
○ 説明力の高い特徴量を加える
● パラメーターのチューニング
○ モデルの柔軟度の調整
47. Copyright Shiroyagi Corporation. All rights reserved.
変数選択のアプローチ
● 変数増加法
○ 一番説明力の高い特徴量から初めて、説明力の高い順番で逐次的に加えてい
く方法
● 変数減少法
○ 考えられる特徴量を全て投入して、説明力の弱い特徴量を切っていく方法
● 変数増減法
○ 上記の2つを組み合わせた方法
49. Copyright Shiroyagi Corporation. All rights reserved.
パラメータのチューニングの方法
● グリッドサーチ
○ 与えたパラメーターの候補を総当たりで検証する
例: ランダムフォレスト
● 木の数
○ 10
○ 50
○ 100
● 最大の木の深さ
○ 5
○ 10
○ 20
木の数 最大の木の深さ
10 5
50 5
100 5
10 10
50 10
100 10
10 20
50 20
100 20
50. Copyright Shiroyagi Corporation. All rights reserved.
変数選択とパラメータチューニングのステップ
データ
全体
学習用
データ
テスト
データ
最終的なモデル評価
学習用
データ1
学習用
データ
2
変数選択
・・・・
クロスバリデーションによるパラメーターチューニング
最適な
パラメータを
決定
51. Copyright Shiroyagi Corporation. All rights reserved.
モデルの精度をどのように評価するか?
モデルの評価指標はいろいろある。
しかし、どの評価指標を使えば良いか?
この質問の答えるには、そもそもの分析のゴールにたち戻る必要が
ある。
まずターゲット変数が連続値かフラグかによって異なる。
● 連続値の場合
○ RMSE, MSE, MAE...
● フラグ
○ Accuracy , Precision, Recall, F-score...
52. Copyright Shiroyagi Corporation. All rights reserved.
Mean Squared ErrorとMean Absolute Errorどちらが良い?
誤差 誤差
+- +-
罰の強さ 罰の強さ
Mean Squared Error
(平均二乗誤差)
Mean Absolute Error
(平均絶対誤差)
53. Copyright Shiroyagi Corporation. All rights reserved.
実際にやってみましょう
必要なライブラリをインポートしてください。
from sklearn.linear_model import LinearRegression #線形回帰モデル
from sklearn.tree import DecisionTreeRegressor # 回帰木
from sklearn.ensemble import RandomForestRegressor #ランダムフォレスト
from sklearn.grid_search import GridSearchCV #グリッドサーチ
from sklearn.cross_validation import train_test_split #学習データとテストデータ分割
from sklearn.metrics import mean_squared_error #評価指標: MSE