Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう

20,635 views

Published on

Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう

Published in: Data & Analytics
  • Be the first to comment

Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう

  1. 1. Pythonで動かして学ぶ機械学習入門 第1回 :予測モデルを作ってみよう 2016/9/9 堅田@白ヤギコーポレーション
  2. 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. 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 必要なライブラリは入っていますか? 入っていなければ、以下のコマンドで入れてください。
  4. 4. Copyright Shiroyagi Corporation. All rights reserved. アジェンダ 1. ビジネス現場における機械学習 2. Pandasの最低限の使い方 3. 特徴量の作成 4. 特徴量の選択 5. 教師あり学習 6. モデル評価
  5. 5. Copyright Shiroyagi Corporation. All rights reserved. 不動産仲介企業の新サービスを立ち上げろ! • あなたは不動産仲介会社のデータサイエンティストです • 商品企画部長から新サービスとしてユーザーが販売物件のスペッ クを入力すると予想成約価格が出力される自動査定サービスを検 討しており、背後のアルゴリズムを検討してほしいと相談されました • あなたならどうやってアプローチしますか?
  6. 6. Copyright Shiroyagi Corporation. All rights reserved. ビジネスにおけるデータ分析のステップ データの 準備 データの 前処理 モデル作成 モデルの 評価 ビジネスゴールから分析のゴールへの翻訳
  7. 7. Copyright Shiroyagi Corporation. All rights reserved. ビジネスにおけるデータ分析のステップ データの 準備 データの 前処理 モデル作成 モデルの 評価 ビジネスゴールから分析のゴールへの翻訳
  8. 8. Copyright Shiroyagi Corporation. All rights reserved. ビジネスゴールから分析のゴールへの翻訳 ここでのビジネスゴールは?(最終的に与えたいインパクト) - ??
  9. 9. Copyright Shiroyagi Corporation. All rights reserved. ビジネスゴールから分析のゴールへの翻訳 ここでのビジネスゴールは?(最終的に与えたいインパクト) - 自動査定システムを通じた物件売却の相談件数 では、分析に求められる要件は? - ??
  10. 10. Copyright Shiroyagi Corporation. All rights reserved. ビジネスゴールから分析のゴールへの翻訳 ここでのビジネスゴールは? - 自動査定システムを通じた物件売却の相談件数 では、分析に求められる要件は? - できるだけわかりやすく・少ない入力(入力しやすい)項目で - 精度の高い予測を行う - レスポンスまでの時間は短く(瞬時に) - 週に1回モデルの更新 などなど
  11. 11. Copyright Shiroyagi Corporation. All rights reserved. データの準備 データの 準備 データの 前処理 モデル作成 モデルの 評価 ビジネスゴールから分析のゴールへの翻訳
  12. 12. Copyright Shiroyagi Corporation. All rights reserved. 講義ではできませんが・・・データの準備はとても重要 多くの場合、データセットは自分で作る必要があります。 どんなデータを用意するかはあなたの想像力・観察眼・仮説力にか かっています。 原因になりそう な変数1 原因になりそう な変数2 原因になりそう な変数N ・・・ 住宅 価格 なにかしらの 関係性 (関数) どんな要因で住宅価 格を説明できそうで すか?
  13. 13. Copyright Shiroyagi Corporation. All rights reserved. データは揃った!次はデータの前処理だ! データの 準備 データの 前処理 モデル作成 モデルの 評価 ビジネスゴールから分析のゴールへの翻訳
  14. 14. Copyright Shiroyagi Corporation. All rights reserved. データの前処理の流れ データの 読み込み 要約統計量の 確認 分布の理解 特徴量の設計 欠損の確認 データ理解
  15. 15. Copyright Shiroyagi Corporation. All rights reserved. 実際にデータを見ていきましょう データセットはここからダウンロードして使います。 https://www.kaggle.com/harlfoxem/housesalesprediction
  16. 16. Copyright Shiroyagi Corporation. All rights reserved. まずは、iPython Notebookを起動しよう! $ipython notebook 以下のコマンドプロンプトで以下のコマンドを打つと Jupyter Notebookが起動します。
  17. 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. 18. Copyright Shiroyagi Corporation. All rights reserved. データの読み込み #CSVの場合 dataset = pd.read_csv(“ファイル名”) #TSVの場合 dataset = pd.read_csv(“ファイル名”, delimiter = ‘t’)
  19. 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を使ってデータを抽出することもできます。
  20. 20. Copyright Shiroyagi Corporation. All rights reserved. データはこんな感じ
  21. 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件の駐車場の広さ
  22. 22. Copyright Shiroyagi Corporation. All rights reserved. Pandasならデータ理解が簡単にできます データの 読み込み 要約統計量の 確認 分布の理解 特徴量の設計 欠損の確認 データ理解
  23. 23. Copyright Shiroyagi Corporation. All rights reserved. pandasのすごいところ1: describe一発で要約統計量を出力! dataset.describe()
  24. 24. Copyright Shiroyagi Corporation. All rights reserved. pandasのすごいところ2: データの操作が簡単 本日カバーする操作 ● 行の指定 ● 列の指定 ● カラム間の演算 ● カラムに対する一括関数適用 ● ダミー変数作成 ● フィルタリング ※上記は最低限です
  25. 25. Copyright Shiroyagi Corporation. All rights reserved. Pandas(+matplotlib)ならデータの分布の確認も簡単! 本日カバーするグラフ ● ヒストグラム ● 散布図 ● 棒グラフ ● 箱ヒゲ図 ※上記は最低限です
  26. 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. 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) 欠損があるレコードを削除する
  28. 28. Copyright Shiroyagi Corporation. All rights reserved. 特徴量の設計 データの 読み込み 要約統計量の 確認 分布の理解 特徴量の設計 欠損の確認 データ理解
  29. 29. Copyright Shiroyagi Corporation. All rights reserved. 「特徴量」とは?? 人によっては ● 特徴量 ● 素性 ● 変数、説明変数 ● フィーチャー ● カラム(いう人いるかな) ● パラメーター(いままでひとりだけ) と呼びます。 要は、 「説明したい変数」(これも人によって、被説明変数、ターゲット変数など呼ばれます)を説明 するための要因です。
  30. 30. Copyright Shiroyagi Corporation. All rights reserved. 精度の高いモデルを作るためには特徴量作成は必須! 集めたデータをそのまま使って、高い精度を達成できるモデルを作れることは稀 よって当初集めたデータにある特徴量を組み合わせて、新しい特徴量を作っていく、これを Feature Engineeringと呼びます。 例) 近所の物件と比較した相対的リビング広さ度 = sqft_living / sqft_living15 みなさん、他にはどんな特徴量を作りたいですか?
  31. 31. Copyright Shiroyagi Corporation. All rights reserved. いよいよモデリング 改めて今回の目的は 「住宅のスペックから予想成約価格を出力する」モデルを作る 機械学習の種類 ● 教師あり学習 ○ 回帰問題(Regression)(ターゲット変数が連続数値) ○ 分類問題(Classification)(ターゲット変数がフラグ/ラベル) ● 教師なし学習
  32. 32. Copyright Shiroyagi Corporation. All rights reserved. 今回試すアルゴリズム ● 回帰分析 (LinearRegression) ● 回帰木 (DecisionTreeRegressor) ● ランダムフォレスト (RandomForestRegressor)
  33. 33. Copyright Shiroyagi Corporation. All rights reserved. 教師あり機械学習のアルゴリズムで最低限抑えるべきポイント ● どんなターゲット変数がとれるか? ○ 連続値? ○ フラグ? ● 目的関数: 何を最小化/最大化させるのか? ● 関数の形は何か? ● パラメータは何か?その役割は? ● 解釈可能性(interpretability)は? ● 予測可能性(Predictability)は? 特徴量1 特徴量M ・・・ ターゲット 変数関数
  34. 34. Copyright Shiroyagi Corporation. All rights reserved. 回帰分析 • ターゲット変数: 連続値 • 目的関数: 誤差の二乗の合計 • 関数の形: 2次元なら直線、3次元なら面(つまり線形) X Y 回帰直線 Y = a x + b 残差
  35. 35. Copyright Shiroyagi Corporation. All rights reserved. 小うるさいこと言うと 統計モデルとしての回帰分析の前提条件 • 誤差が平均0の正規分布に従う • 誤差の分散が均一 • 誤差に系列相関がない これらの前提条件が満たされない場合は、 回帰分析の推定結果は信頼できない • 残差が平均0の正規分布に従う • 残差の分散が均一 • 残差に系列相関がない
  36. 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
  37. 37. Copyright Shiroyagi Corporation. All rights reserved. 解約(x)と継続(o)をきれいに分ける 縦線と横線を1本引いてください × × × × × × × × × ×
  38. 38. Copyright Shiroyagi Corporation. All rights reserved. 線を引っ張るとこんな感じかな × × × × × × × × × × 10回 1,200円
  39. 39. Copyright Shiroyagi Corporation. All rights reserved. 引いた線を文章で表現すると・・・ もし(If),前月の訪問数が10回以上 かつ もし(If)直近3ヶ月の購入金額が1,200円以下だ と(Then) 解約しやすい こんな文章になります。 さて、これをツリー構造で表すと × × × × × × × × × × 10回 1,200円
  40. 40. Copyright Shiroyagi Corporation. All rights reserved. IF~ Then~ のルールをツリー表現で表すと…これが決定木 40 Yes No Yes No 10回以下 1,200円以下 解約しやすい 継続 1,200円 10回
  41. 41. Copyright Shiroyagi Corporation. All rights reserved. 決定木とは ● ターゲットの変数: フラグ ● 目的関数: 純度(ジニ係数) ● 関数の形: ツリー(縦線と横線) ターゲットの変数が「連続数値」の場合が回帰木 なので、目的関数が ● 二乗誤差 ● 関数の形:ツリー
  42. 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. 43. Copyright Shiroyagi Corporation. All rights reserved. ランダムフォレスト … ID 購入 性別 年齢 … 101 ? 男性 42 102 ? 女性 36 103 ? 女性 27 : : : :  あり   あり   なし       あり   なし   あり 多数決でID.101は 「購入あり」と予測 様々なルールを持つ決定木を用いて、それぞれで予測を行う 生成した決定木 入力すると 回帰の場合は各回帰木の出力の平均が予測結果となる
  44. 44. Copyright Shiroyagi Corporation. All rights reserved. ランダムフォレストの主なパラメーター ● 木の数(n_estimator) ● 使用する列の個数(max_features) ● 最大の木の深さ(max_depth) などなど
  45. 45. Copyright Shiroyagi Corporation. All rights reserved. ではここで問題です 一般的に言って、一番精度が良いモデルはどれだと思いますか? ● 回帰分析 ● 決定木(回帰木) ● ランダムフォレスト
  46. 46. Copyright Shiroyagi Corporation. All rights reserved. 良い精度のモデルを得るためにやること ● アルゴリズムの選択 ● 変数選択(Feature Selection) ○ 説明力の弱い特徴量を落とす ○ 説明力の高い特徴量を加える ● パラメーターのチューニング ○ モデルの柔軟度の調整
  47. 47. Copyright Shiroyagi Corporation. All rights reserved. 変数選択のアプローチ ● 変数増加法 ○ 一番説明力の高い特徴量から初めて、説明力の高い順番で逐次的に加えてい く方法 ● 変数減少法 ○ 考えられる特徴量を全て投入して、説明力の弱い特徴量を切っていく方法 ● 変数増減法 ○ 上記の2つを組み合わせた方法
  48. 48. Copyright Shiroyagi Corporation. All rights reserved. パラメーターのチューニング: オーバーフィッティングを避けるためにパラメータを調整 モデルの柔軟性 低                             高 エラー 検証用データにおけるエラー 学習データにおけるエラー
  49. 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. 50. Copyright Shiroyagi Corporation. All rights reserved. 変数選択とパラメータチューニングのステップ データ 全体 学習用 データ テスト データ 最終的なモデル評価 学習用 データ1 学習用 データ 2 変数選択 ・・・・ クロスバリデーションによるパラメーターチューニング 最適な パラメータを 決定
  51. 51. Copyright Shiroyagi Corporation. All rights reserved. モデルの精度をどのように評価するか? モデルの評価指標はいろいろある。 しかし、どの評価指標を使えば良いか? この質問の答えるには、そもそもの分析のゴールにたち戻る必要が ある。 まずターゲット変数が連続値かフラグかによって異なる。 ● 連続値の場合 ○ RMSE, MSE, MAE... ● フラグ ○ Accuracy , Precision, Recall, F-score...
  52. 52. Copyright Shiroyagi Corporation. All rights reserved. Mean Squared ErrorとMean Absolute Errorどちらが良い? 誤差 誤差 +- +- 罰の強さ 罰の強さ Mean Squared Error (平均二乗誤差) Mean Absolute Error (平均絶対誤差)
  53. 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

×