Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ざっくりとわかる分析

 ざっくりとわかる分析

社内向けのプレゼンで使いました。理論的なところは厳密性を欠いてる可能性あります。詳細な理解の際には専門書を合わせて読むのをお勧めします。

hayata-yamamoto

March 20, 2019
Tweet

More Decks by hayata-yamamoto

Other Decks in Science

Transcript

  1. Hayata Yamamoto (23) • Role ◦ Data Scientist @RareJob •

    BackGround ◦ Sales -> ML eng. -> DS • Interest ◦ Statistics
  2. データ取得 【目的】 • データ自体をプログラムに読み込むため 【やること】 • CSV, JSON, SQL, API,

    HTMLなどいろんなソースからデータを取得してくる • 企業の場合、プロダクションのRDBとのやりとりが主体 • 直接SQL叩いて取ってくることもあるし、CSVにして違うデータと結合してから使うことも。 • クラウド上のデータとやりとりすることが多いので、インフラ的な知識がある方が好ましい。
  3. 特徴抽出 【やること】 • 変数同士の差分や対数、指数などをとる • 新しい変数を既存の変数から作成する • 入力変数間、入力変数と出力変数の関係性を調べる(相関係数や相互情報量など) • カテゴリデータを変換する

    • データの正規化 • テキストデータのベクトル化する(Bag-of-X, Word2vec, PMI+SVDなど) • 波形データをフーリエ変換する • いらない変数を削除する(統計的仮説検定、予測モデルによる貢献度分析) • スパースなデータを圧縮する(PCA) • データをベクトルの値を用いてグルーピングする(クラスタリング) など
  4. 学習準備 【目的】 • ときたい問題を定義する • データの不均衡を解消する • 分類や回帰を行えるモデルを用意する • パイプライン作る

    ◦ データ流すと学習から予測までやってくれるやつ • モデルをどのように評価するかを決める ◦ 最終的にモデルの性能はどのようになっていてほしいかを決める
  5. 学習準備 【やること】 • 不均衡データに対する対処 ◦ 偏っているまま何もしないと、不均衡の比率の高い方ばかり当てるモデルができる ◦ サンプリング手法を導入する(imblanced-learnなど) ◦ 不均衡度合いなどを用いて罰則項を変える

    ◦ クラスの重みを考慮できる評価関数を用いる ◦ 不均衡データに対応している交差検証法を用いる • モデルを作成する ◦ sklearn, XGBoost, LightGBMなどはインスタンス生成するだけ ◦ GitHubとかから学習済みの良いモデルを拝借することもある ◦ 自前でニューラルネットワークのモデルを作る(あんまり推奨できないかも) • 各種パラメータを決める ◦ 最適化手法、罰則項の値、学習率、活性化関数など可変なもの全てがパラメータ ◦ どのパラメータが良いかを事前に誰も知らない(先行研究がある場合は除く)
  6. どんな問題があるか • 教師あり学習 ◦ 回帰問題 ◦ 分類問題 <- これから説明する問題 •

    教師なし学習 ◦ 次元削減 ◦ クラスタリング • 半教師あり学習(詳しくない) • 強化学習(詳しくない)
  7. モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦

    Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面をつかいたいやつ ◦ Support Vector Machine (とても難しい) • 木をベースにしたやつ ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
  8. モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦

    Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面を使いたいやつ ◦ Support Vector Machine (とても難しい) • 木の仲間たち ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
  9. モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦

    Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面を使いたいやつ ◦ Support Vector Machine (とても難しい) • 木の仲間たち ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
  10. モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦

    Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面を使いたいやつ ◦ Support Vector Machine (とても難しい) • 木の仲間たち ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
  11. 決定木 【概要】 • 一つの木を使って、予測する問題を考える • 分割することで情報量が変化するかどうかを見ている • 分離平面がガタガタしがち(平滑化の問題) 【気持ち】 •

    シンプルでわかりやすい。マイニングでもよく使われる • 学習データに過学習してしまうことも • 独裁政治みたいな感じ
  12. Bagging, RandomForest 【概要】 • 複数の木の合議(committee)の投票によって予測結果が決まる。 • それぞれの木が、各入力変数についてみるので多角的な結果を提供できる • RandomForestは、Baggingの重要な拡張 •

    あるブートストラップ標本で任意の変数の候補を取り出して、ランダムにその中から分割する変数を決め ることを繰り返す(雑) 【気持ち】 • 予測時の視点が増える • 実質的に変数間の関係性が考慮されているように見える • 変数重要度取れるので嬉しい • 元老院みたいなイメージ
  13. AdaBoost, Gradient Boosting 【概要】 • 弱い分類器を用いて最終的な結果を出力する • あまり結果に貢献しなかった変数の重みを下げる仕組みがある • 最終的には重み付きの合意形成が行われる

    • パラメータ多くなりがち 【気持ち】 • 期待値よりも少し高いくらいの分類器をたくさん使って結果出すのすごい • パラメータ探索が勝負 • 過学習しやすいが、良い性能が出ることも多い • 「お前の言ってることあんまり信用ならないから、ごめん不採用にするわ」的なイメージ
  14. 何を評価するか(分類の場合) 【概要】 • モデルにどうなってほしいのかを数学的に表現する。 • トレードオフを意識して、「何を取るのか」「何を捨てるのか」をはっきりしとくと良い 【代表的な候補】 • 正答率 :

    Accuracy • 再現率 : Recall • 適合度 : Precision • 特異度 : Specificity • F値 : F-measure, F1 score • ROC:Receiver Operating Characteristic • AUC: Area Under the Curve など
  15. どのように評価するか 【概要】 • 評価する関数が決まったら、どのように性能を評価するかを決める • 主な目的は、「このモデルの汎化性能はどのくらいあるかを確認すること」 【代表的な候補】 • ホールドアウト法 ◦

    あらかじめトレーニングとテストを任意の比率で分けておく • 交差検証法 ◦ データのうち任意の数個を抜いて学習して性能評価する ◦ これを任意の回数繰り返して、性能をみる ◦ クラスの不均衡を考慮するものもある • ブートストラップ法 ◦ サンプルを重複を許して部分抽出するやり方(詳しくない) ◦ BaggingやRandomForestもこれやってる ◦ https://qiita.com/tjmnmn/items/3aed6fb85f75446f74ca <- 丁寧
  16. 学習 【目的】 • トレーニングデータの特徴をモデルに教える 【やること】 • 学習用データ(x, y)をモデルに与えて学習させる • 学習時のデータxをモデルに渡して、yを予測させる

    • 評価関数に正解と予測のyを与えて、うまく学習できているかを確認する ◦ 学習用データでいい性能が出ないとテストではもっと悪くなる
  17. 原因調査 【目的】 • モデルが苦手としてるサンプルの特徴を見つける • 新しい特徴量の抽出に知見を生かす 【やること】 • 誤答したサンプルの特徴量を洗って、傾向を分析する •

    誤答の分布をプロットしたり、散布図描いたりする • 既存の特徴量だけでは識別が難しそうな場合は、新しい特徴量の作成方法を考える
  18. 【ねらい】 • データ分析の全体像がわかる • 業務内容が理解できる • モデルの雰囲気がわかる • 実験レポートの6割くらい理解できるようになる どうですか?わかりましたか?

    考えることたくさんあるので、細かいところは理解できなくても大丈夫です。 全体的にこういう感じか〜〜という流れができていれば十分です。