Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ざっくりとわかる分析
Search
hayata-yamamoto
March 20, 2019
Science
0
160
ざっくりとわかる分析
社内向けのプレゼンで使いました。理論的なところは厳密性を欠いてる可能性あります。詳細な理解の際には専門書を合わせて読むのをお勧めします。
hayata-yamamoto
March 20, 2019
Tweet
Share
More Decks by hayata-yamamoto
See All by hayata-yamamoto
価値提供プロセスを試行錯誤し続けてきた話
hayata_yamamoto
0
120
AppSync と仲良くなろう
hayata_yamamoto
1
180
今日から機械学習チームを始めるには
hayata_yamamoto
0
110
レアジョブのデータ活用の今とこれから
hayata_yamamoto
0
740
医療と機械学習とMRI
hayata_yamamoto
0
210
Make Questions to Solve Problems ~how to use science as tool~
hayata_yamamoto
0
30
Other Decks in Science
See All in Science
LIMEを用いた判断根拠の可視化
kentaitakura
0
330
Boil Order
uni_of_nomi
0
120
白金鉱業Meetup Vol.15 DMLによる条件付処置効果の推定_sotaroIZUMI_20240919
brainpadpr
1
480
20分で分かる Human-in-the-Loop 機械学習におけるアノテーションとヒューマンコンピューターインタラクションの真髄
hurutoriya
4
2.3k
証明支援系LEANに入門しよう
unaoya
0
350
非同期コミュニケーションの構造 -チャットツールを用いた組織における情報の流れの設計について-
koisono
0
140
Machine Learning for Materials (Lecture 9)
aronwalsh
0
210
How were Quaternion discovered
kinakomoti321
2
1.1k
大規模言語モデルの開発
chokkan
PRO
84
33k
Iniciativas independentes de divulgação científica: o caso do Movimento #CiteMulheresNegras
taisso
0
210
Snowflake上でRを使う: RStudioセットアップとShinyアプリケーションのデプロイ
ktatsuya
0
410
Spectral Sparsification of Hypergraphs
tasusu
0
170
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.2k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
A Modern Web Designer's Workflow
chriscoyier
693
190k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Statistics for Hackers
jakevdp
796
220k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
RailsConf 2023
tenderlove
29
900
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Transcript
ざっくりとわかる分析
Agenda 1. Purpose 2. Workflow 3. Conclusion
Hayata Yamamoto (23) • Role ◦ Data Scientist @RareJob •
BackGround ◦ Sales -> ML eng. -> DS • Interest ◦ Statistics
Purpose
【ねらい】 • データ分析の全体像がわかる • 業務内容が理解できる • モデルの雰囲気がわかる • 実験レポートの6割くらい理解できるようになる 【やらないこと】
• 数学の厳密な説明 • モデルの詳細な説明 • 全体的な説明の厳密性の担保
Workflow
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査 分析業務の流れ
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査 不思議なことに... 適当にされがち 謎にこだわられがち
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査 不思議なことに... 適当にされがち 謎にこだわられがち
データがゴミだと地獄(大事)
それぞれ何やってるの?
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査
データ取得 【目的】 • データ自体をプログラムに読み込むため 【やること】 • CSV, JSON, SQL, API,
HTMLなどいろんなソースからデータを取得してくる • 企業の場合、プロダクションのRDBとのやりとりが主体 • 直接SQL叩いて取ってくることもあるし、CSVにして違うデータと結合してから使うことも。 • クラウド上のデータとやりとりすることが多いので、インフラ的な知識がある方が好ましい。
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査
ハンドリング 【目的】 • 読み込んだデータを処理しやすい形に変形するため • ノイズになるデータを削除しておくため(≠欠損データ) 【やること】 • HTMLをスクレイピングしたり、APIのレスポンスをパースしたりする。 •
システムエラーや仕様上のバグなど、100%ノイズになるデータを削除する • ログ収集とかのETLと考え方は一緒。
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査
特徴抽出 【目的】 • 予測したい数値やカテゴリ間の違いが出る情報をデータから取り出すため • 特徴をうまく出して機械学習モデルの性能をあげるため • ドメイン知識を反映した情報を作り出すため • データから知識を取り出すため
特徴抽出 【やること】 • 変数同士の差分や対数、指数などをとる • 新しい変数を既存の変数から作成する • 入力変数間、入力変数と出力変数の関係性を調べる(相関係数や相互情報量など) • カテゴリデータを変換する
• データの正規化 • テキストデータのベクトル化する(Bag-of-X, Word2vec, PMI+SVDなど) • 波形データをフーリエ変換する • いらない変数を削除する(統計的仮説検定、予測モデルによる貢献度分析) • スパースなデータを圧縮する(PCA) • データをベクトルの値を用いてグルーピングする(クラスタリング) など
None
http://blog.media.teu.ac.jp/2015/05/post-0ec1.html
None
None
データ取得 ハンドリング 特徴量抽出 学習準備 学習 テスト 原因調査
学習準備 【目的】 • ときたい問題を定義する • データの不均衡を解消する • 分類や回帰を行えるモデルを用意する • パイプライン作る
◦ データ流すと学習から予測までやってくれるやつ • モデルをどのように評価するかを決める ◦ 最終的にモデルの性能はどのようになっていてほしいかを決める
学習準備 【やること】 • 不均衡データに対する対処 ◦ 偏っているまま何もしないと、不均衡の比率の高い方ばかり当てるモデルができる ◦ サンプリング手法を導入する(imblanced-learnなど) ◦ 不均衡度合いなどを用いて罰則項を変える
◦ クラスの重みを考慮できる評価関数を用いる ◦ 不均衡データに対応している交差検証法を用いる • モデルを作成する ◦ sklearn, XGBoost, LightGBMなどはインスタンス生成するだけ ◦ GitHubとかから学習済みの良いモデルを拝借することもある ◦ 自前でニューラルネットワークのモデルを作る(あんまり推奨できないかも) • 各種パラメータを決める ◦ 最適化手法、罰則項の値、学習率、活性化関数など可変なもの全てがパラメータ ◦ どのパラメータが良いかを事前に誰も知らない(先行研究がある場合は除く)
どんな問題があるか • 教師あり学習 ◦ 回帰問題 ◦ 分類問題 <- これから説明する問題 •
教師なし学習 ◦ 次元削減 ◦ クラスタリング • 半教師あり学習(詳しくない) • 強化学習(詳しくない)
モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦
Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面をつかいたいやつ ◦ Support Vector Machine (とても難しい) • 木をベースにしたやつ ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦
Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面を使いたいやつ ◦ Support Vector Machine (とても難しい) • 木の仲間たち ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
None
予測のミスを最小にしたいやつ 【概要】 • 予測と正解の差(関数による)を最小にするようにしたい。 • 入力変数それぞれにかける重みの値を最適にすることで達成を目指す。 【やること】 • 以下の基本形をいい感じに拡張したモデルを使って予測する。
ロジスティック回帰 【概要】 • 名前は回帰だけど、分類のモデル • 線形回帰にロジスティック関数(下図)を導入して出力の範囲を[0, 1]に収めたもの 【気持ち】 • 線形回帰がわかってれば、理解は多少楽
• ニューラルネットワークへの橋渡しにもなる • 初学者が最初に学ぶことの多い分類モデル
モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦
Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面を使いたいやつ ◦ Support Vector Machine (とても難しい) • 木の仲間たち ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
分離超平面つかいたいやつ(サポートベクターマシン) 【概要】 • 入力変数の空間をうまく分けたい • クラス間のマージン(空白部分の大きさ)を最大にするように分ける • 統計的学習理論という分野の話(らしい) • 識別関数ベースなので、確率を返さないことが多い(返せるモデルもある)
【やること】 • 以下のような関数を考えます。(難しいので詳細は専門書へ)
None
分離超平面つかいたいやつ(サポートベクターマシン) 【気持ち】 • できる限り線形分離可能だと嬉しい • 入力空間を効率的に特徴量空間に展開できて、線形分離可能性を増やせる(カーネルトリック) • 非線形分離しないといけない入力空間も特徴量空間では線形分離可能な場合もある • 多クラスの分離になると計算量が増えがち(One
vs One, One vs Rest) • データが少ない実験では意外とよく使われる印象(医療とか)
None
None
モデルの種類(ざっくり) • 線形モデルの仲間たち ◦ OLS, GLS, Logistic Regression (初学者向け) ◦
Ridge, Lasso (難しい) ◦ Neural Network (とても難しい) • 分離超平面を使いたいやつ ◦ Support Vector Machine (とても難しい) • 木の仲間たち ◦ Decision Tree (初学者向け) ◦ Bagging, RandomForest (難しい) ◦ AdaBoost, Gradient Boosting (難しい) ◦ XGBoost, LightGBM (とても難しい)
木を使うやつ 【概要】 • 二分技などを用いて、再帰的に変数の範囲を分割することを考える • 一本だけ、複数、大量に使うこともある • 人間の感覚に近く、直感的でわかりやすい • 入力変数間の関係を補足しやすい
• 未来予測だけでなく、既存のデータに対するマイニングでもよく使われる
決定木 【概要】 • 一つの木を使って、予測する問題を考える • 分割することで情報量が変化するかどうかを見ている • 分離平面がガタガタしがち(平滑化の問題) 【気持ち】 •
シンプルでわかりやすい。マイニングでもよく使われる • 学習データに過学習してしまうことも • 独裁政治みたいな感じ
None
None
None
Bagging, RandomForest 【概要】 • 複数の木の合議(committee)の投票によって予測結果が決まる。 • それぞれの木が、各入力変数についてみるので多角的な結果を提供できる • RandomForestは、Baggingの重要な拡張 •
あるブートストラップ標本で任意の変数の候補を取り出して、ランダムにその中から分割する変数を決め ることを繰り返す(雑) 【気持ち】 • 予測時の視点が増える • 実質的に変数間の関係性が考慮されているように見える • 変数重要度取れるので嬉しい • 元老院みたいなイメージ
AdaBoost, Gradient Boosting 【概要】 • 弱い分類器を用いて最終的な結果を出力する • あまり結果に貢献しなかった変数の重みを下げる仕組みがある • 最終的には重み付きの合意形成が行われる
• パラメータ多くなりがち 【気持ち】 • 期待値よりも少し高いくらいの分類器をたくさん使って結果出すのすごい • パラメータ探索が勝負 • 過学習しやすいが、良い性能が出ることも多い • 「お前の言ってることあんまり信用ならないから、ごめん不採用にするわ」的なイメージ
None
None
None
何を評価するか(分類の場合) 【概要】 • モデルにどうなってほしいのかを数学的に表現する。 • トレードオフを意識して、「何を取るのか」「何を捨てるのか」をはっきりしとくと良い 【代表的な候補】 • 正答率 :
Accuracy • 再現率 : Recall • 適合度 : Precision • 特異度 : Specificity • F値 : F-measure, F1 score • ROC:Receiver Operating Characteristic • AUC: Area Under the Curve など
本当に一部しか話してません。実装されていない関数もあるはずです。
どのように評価するか 【概要】 • 評価する関数が決まったら、どのように性能を評価するかを決める • 主な目的は、「このモデルの汎化性能はどのくらいあるかを確認すること」 【代表的な候補】 • ホールドアウト法 ◦
あらかじめトレーニングとテストを任意の比率で分けておく • 交差検証法 ◦ データのうち任意の数個を抜いて学習して性能評価する ◦ これを任意の回数繰り返して、性能をみる ◦ クラスの不均衡を考慮するものもある • ブートストラップ法 ◦ サンプルを重複を許して部分抽出するやり方(詳しくない) ◦ BaggingやRandomForestもこれやってる ◦ https://qiita.com/tjmnmn/items/3aed6fb85f75446f74ca <- 丁寧
None
None
パイプラインを組む 【概要】 • 中身の実装が異なっているだけで、やりたいことの大枠はみんな一緒 • 評価したいときは、正解と予測を入れて評価を返すだけ、モデルはxを入れてyを返すだけ • それをデータ入れたらうまく動くようにしておきたい(その方が楽) • パラメータ最適化ができるならそれも対応しちゃう
【やること】 • 特徴量抽出、モデル、評価、検証の方法を決めてパイプラインを作る • 最適化関数を作成する
最適化関数の作成 パイプラインの作成
データ取得 ハンドリング 特徴量抽出 モデル作成 学習 テスト 原因調査
学習 【目的】 • トレーニングデータの特徴をモデルに教える 【やること】 • 学習用データ(x, y)をモデルに与えて学習させる • 学習時のデータxをモデルに渡して、yを予測させる
• 評価関数に正解と予測のyを与えて、うまく学習できているかを確認する ◦ 学習用データでいい性能が出ないとテストではもっと悪くなる
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査
テスト 【目的】 • 未知のデータに対するモデルの振る舞いを確認する • 作成したモデルが”ある程度”汎用的に使えるものかを確認する 【やること】 • 学習済みのモデルで新しいデータを予測する •
正解と予測を評価関数に入れて、評価する
None
None
None
None
データ取得 ハンドリング 特徴抽出 学習準備 学習 テスト 原因調査
原因調査 【目的】 • モデルが苦手としてるサンプルの特徴を見つける • 新しい特徴量の抽出に知見を生かす 【やること】 • 誤答したサンプルの特徴量を洗って、傾向を分析する •
誤答の分布をプロットしたり、散布図描いたりする • 既存の特徴量だけでは識別が難しそうな場合は、新しい特徴量の作成方法を考える
Conclusion
【ねらい】 • データ分析の全体像がわかる • 業務内容が理解できる • モデルの雰囲気がわかる • 実験レポートの6割くらい理解できるようになる どうですか?わかりましたか?
考えることたくさんあるので、細かいところは理解できなくても大丈夫です。 全体的にこういう感じか〜〜という流れができていれば十分です。
おわり