一橋大学 #経済学のための実践的データ分析 2020夏: 9/10

一橋大学 #経済学のための実践的データ分析 2020夏: 9/10

一橋大学 #経済学のための実践的データ分析 2020夏: 9/10
9.経済学と機械学習
9.1.最終レポート(reprise)
9.2.MLとAI/パネルデータ
9.3.SVM/決定木
9.4.スパース推定とPSM

一橋大学大学院経済学研究科
原泰史
yasushi.hara@r.hit-u.ac.jp

F5f758ca2ec0de2da9781ce9391d9c6c?s=128

yasushihara

July 16, 2020
Tweet

Transcript

  1. 一橋大学 「経済学のための 実践的データ分析」 2020夏: 9/10 9.経済学と機械学習 9.1.最終レポート(reprise) 9.2.MLとAI/パネルデータ 9.3.SVM/決定木 9.4.スパース推定とPSM

    一橋大学大学院経済学研究科 原泰史 yasushi.hara@r.hit-u.ac.jp
  2. 今日の内容 • 10:30-10:45 • プレ講義 [録画なし] • 10:45-11:05 • 9.1最終レポートについて

    (reprise)[録画あり] • 11:05-11:10 • インターミッション[録画なし] • 11:10-11:30 • 9.2 MLとAIとパネルと経済学 [録画あり] • 11:30-11:35 • インターミッション2[録画なし] • 11:35-11:55 • 9.3 SVM/決定木分析[録画] • 11:55-12:00 • インターミッション3[録画なし] • 12:00-12:20 • 9.4 スパース推定とPSM [録画]
  3. 次回以降の 予定 • 7/20 10/10回 • 最終レポートプロポーサル 報告会 • 詳細については8.4

    と9.1 で • 私は立命館@京都 から参加予定であります • 7/29 最終レポートの納品日 • 7/30-8/1 最終レポートの自己評価/360°評価 • 8/3 成績登録締切日
  4. 9.1 最終レポート (reprise)

  5. まとめと最終報告レポート • 1組4名のグループを作り, そのメンバーで最終レポートを作成 します。 • データ分析組, • データ調達組, •

    プレゼンテーション作成組, • プレゼンテーション担当 など役割分担はお任せします。 • 第10回で, 最終レポートのプロポーサルを発表します • 発表時間10分, 質疑応答5分 • データの初期的な分析結果がまとまっているとベター
  6. まとめと最終報告レポート • テーマ • 「◦◦のための実践的データ分析」 • 卒論や修論や博論の作成の入り口になるような、データの調達とその データの解析を, 講義で取り上げたデータセットおよび分析手法で実施 する

    • 分析単位はマクロ (国レベル) でもメソ (企業/産業レベル) でもミクロ (個人レベル) でも問いません • 利用できるデータセット • 特に制限なし • 利用できるツール • Tableau, Excel, Word, SQL, BigQuery, Google Colaboratory, Jupyternotebook (Python) など, 特に制限なし
  7. まとめと最終報告レポート • 評価方法 • グループ内での自己評価 • グループ外からの評価 アンケートシステムをPolly で用意します。 •

    評価基準 • (A.) グループ内の役割分担 (B.) データセットのユニークさおよび、それが適切に処理されているか (C.) 分析手法のユニークさおよび、それが適切に解析されているか (D.) プレゼンテーションのユニークさ (E.) 質疑応答にうまくリプライすることが出来ているか • 納品物 • プレゼンテーションに利用したファイル (Word か Powerpoint か Prezi か etc…) を, Slack のDM に代表者がアップすること
  8. 最終レポートのグループ分け • ランダムに学籍番号で割り振りました • 履修している19名を振り分けています • また、履修生以外の聴講生で(アイデア出しなどで)参加した い方がいたら、原まで Slack で

    DM して頂けると幸いです
  9. グループ分け(1) • グループ1 • 2115087U 2117256A 2118279M 2119110U • グループ2

    • 2116158M 2117226Y 2118264U 2119109H • グループ3 • 2117028C 2117173K 2117251Z 2119166C
  10. グループ分け(2) • グループ4 • 2117032A 2117129U 2118050K 2119181S • グループ5

    • 2117096U 2117151H 2117240K
  11. 最終レポートの雛形 • 表紙 • イントロダクション • 先行研究 • 問い •

    仮説 • 集めたデータセット • データ解析結果 • 考察とインプリケーション
  12. 定量分析の業務フロー 2020/7/15 12 リサーチクエス チョンを決める 必要なデータを 探す 論文データ/書誌 情報を使う 特許データ/書誌

    情報を使う その他データを使う (プレスリリース /POS データ) デ ー タ の ク リ ー ニ ン グ / 接 合 を 行 う エクセル/Python/Rでグラフを描く Stata/R/Python で回帰分析する KHCoder/R/Python でテキスト分析 する R/Netdraw etc… でネットワーク分 析する 企業データを 使う
  13. 例.元 IIR 西口先生のネットワーク研究 • “コミュニティー・キャピタル 中国・温州人企業家ネットワー クの繁栄と限界” • http://doi.org/10.11207/taaos. 4.1_200

    • データに頼らずに, 足で稼いで ネットワークの動態をインタ ビュー調査から明らかにする • 足掛け10年(!) 2020/7/15 13
  14. 例. 元 IIR 西口先生のネットワーク研究 • “傑出したパフォーマンスで知られる中国・温州人企業家の国 際的ネットワークは、コミ ュニティー・キャピタルに依拠する 新たな社会ネットワーク分析に適した事例であり、近 年ビッグ

    データ一辺倒の観のある米国の定量分析 (Fleming et al. 2007) を補完する意味で、 詳細なフィールド調査に基づく豊かな実証 的知見を提供し得る。さらに Watts 等(1998, 1999, 2003) がシ ミュレーションで数学的に立証したスモールワールドの知見が、 現実に応用可 能なのは、実効的にコミュニティー・キャピタル に支えられた社会ネットワークに限定さ れることも示唆され る。 ” 2020/7/15 14
  15. あくまでリサーチクエスチョンが大切 • データはあくまでデータ • 研究の問いに合わせて必要なデータを持ってくるのが大切で、 データに合わせて研究するのは本末転倒 (そういう研究も多い けど。。。) • 数年前に比べても利用できるデータはますますリッチになって

    いるので、ますます、「どのような研究がしたくて」、「どの ような問いを立てている」のかが大切に。 2020/7/15 15
  16. ディスカッション • どういうテーマで解析を行うか/リサーチクエスチョンは何か • 解析を行うためには、どういうデータが必要か • メンバーの役割分担 について、グループ内で(いるメンバーで)ディスカッションをし てください。 Spital.chat

    へのリンク https://spatial.chat/s/Hara-DS-Space-2020-Summer
  17. 経済学のための実践的データ分析 グループ1 グループ2 グループ3 グループ4 グループ5

  18. 質疑応答の内容 • どのように研究を発展できる可能性があるか • データの取得方法や分析方法の妥当性 • どのような含意が得られるのか • 単純に、気になったこと, 知りたいこと

  19. 最終レポート回のタイムスケジュール 最初に; 10:45-10:55 グループ発表 発表10分, 質疑応答5分 グループ1 10:55-11:10 グループ2 11:10-11:25

    グループ3 11:25-11:40 グループ4 11:40-11:55 グループ5 11:55-12:10 最後に; 12:10-12:15
  20. 最終レポート報告の360°評価 • プロポーサルのプレゼン時と、最終レポートの報告時二回投票 を行います。 • Polly でプレゼン後に投票を行ってください • 0 から10点までで採点が出来るので,

    レポートにたいして評価 を行ってください • 自分たちのプレゼンにも点数をつけてください
  21. 成績評価の方法

  22. 成績評価(1) • 平常レポート (40パーセント; 必須) • 講義計画に示したように、複数の回で学生にはレポートを課します。 レポートは Word/PowerPoint形式のメールあるいは, github

    経由で の提出が求められます(どの方法を採用するかは、初回の講義で決定し ます)。 • レポートには、(A.) 利用したデータセットとその内容, (B.) 分析の問 い, (C.) 分析手法, (D.) 分析結果 を明記する必要があります。ページ 数や文字数は問いませんが, これらの内容が含まれており, 講義中にア ナウンスする評価手法を満たす場合, 高い得点を得ることが出来ます。 • 平常点 (10パーセント) • 本講義は実習が多く含まれており, また取り扱うデータセットや内容も 多彩です。そのため、受講者同士が協力する必要があります。こうし た受講者の態度を評価するために、平常点を設けます。
  23. 成績評価(2) • 最終レポート (40パーセント; 必須) • 講義の最終回では最終レポートの報告会を行います。受講者は3名から4名か ら構成されるグループで、最終レポートの報告を行う必要があります(人数は 受講者の人数により変更される可能性があります)。最終レポートでは、プレ ゼンテーションの方法を学生は自由に選ぶことが出来ます。PowerPoint

    以 外にも、Prezi などのアクティブプレゼンテーションツールや、他のプレゼ ンテーション手法を用いることが出来ます(プレゼンテーションツールについ ては、必要であれば講義内で説明する機会を設けます)。最終レポートでは、 以下の点について評価を行います。 (A.) グループ内の役割分担 (B.) データセットのユニークさおよび、それが適切に処理されているか (C.) 分析手法のユニークさおよび、それが適切に解析されているか (D.) プレゼンテーションのユニークさ (E.) 質疑応答にうまくリプライすることが出来ているか • 最終レポートの360°グループ評価 (10パーセント) • 3. の最終レポートについて、グループの自己評価および他のグループからの 評価を行います。3. で挙げた評価ポイントに基づき、グループメンバーおよ び他のグループは評価を行います。
  24. 最高成績基準 引用: 一橋大学授業ハンドブック

  25. 成績評価 • 平常レポート • レポート1; max 20 • レポート2; max

    20 • 最終レポート • 40点 • 最終レポートの360°評価 • 10点 • 投票システムから集計したデータを按分します
  26. 9.2 MLとAIとパネルと経済学

  27. 分析手法(1.1 の reprise) • Step1; グラフにする • 「まずは散布図を書いてみる」 • Step2;

    統計的処理を行う (平均値, 中央値, 最大値, 最小値 etc..) • このあたりから、内生性や見せかけの回帰との戦いがはじまる • Step3; 回帰分析など, 入力と出力間の関係性を見る • 重回帰分析 • スパース推定 • 決定木分析, SVM (教師あり/教師なしの機械学習) • Step4; 因果効果を識別する • 因果関係と相関関係を識別する(次のページ)
  28. 因果識別の手法(1) 実験対象 Treated Group Control Group y x Cut-off Point

    • ランダム化比較試験 (RCT) • 対象者と非対象者を無 作為抽出して比較実験 • 回帰不連続(RD) デザイン – 回帰直線シフト 28 実験対象 Treated Group Control Group • 傾向スコアマッチン グ(PSM): – 各政策対象企業と同じ「政 策対象傾向」を持つ企業を 対照群から抽出 引用:岡室博之 (2019) 産業クラスターと地方創生:地域イノベーション政策の展開と分析方法, 一橋大学公開講座
  29. 因果識別の手法(2) • 差の差の分析(DID) • 処置群と対照群の比較 と政策前後比較の二重 差 y t Control

    Group Treated Group t+u t-s ▲t • パネル固定効果分析 • パネルデータを用いて、 各企業の固有の属性の 影響を除去 y x t+i t • 操作変数法(IV): – 内生変数を外生変数 (操作変数)に置き換 える2段階推定 Z X Y U β α 引用:岡室博之 (2019) 産業クラスターと地方創生:地域イノベーション政策の展開と分析方法, 一橋大学公開講座
  30. 機械学習と経済学 • 経済学のフレームワークで機械学習やAIの影響を測定する • 経済学の技法のひとつとして機械学習やAIを活用する • 因果推論 meets 機械学習 •

    今日の9.3や9.4 の内容
  31. 網羅的なもの • The Economics of Artificial Intelligence: An Agenda •

    https://www.nber.org/ books/agra-1
  32. How Causal Inference Findings Solve Tech Companies' Challenges • https://speakerdeck.com/ko_fujita1/how-causal-inference-

    findings-solve-tech-companies-challenges
  33. AI関連を特許と論文で測る

  34. Trends in the number of AI patents granted world-wide Figure

    • The number of patents granted has rapidly increased. • It shows the number of artificial intelligence (AI) patents granted by application country and reveals that it has increased more than threefold (from 708 items in 2012 to 2,888 items in 2016).’ • In particular, AI patents granted in the US increased by 1,628 items during this period (Figure 1a), accounting for approximately 75% of the increase worldwide . 34 (Source: Fuji and Managi (2017))
  35. Trends in the number of AI patents, technology-wise granted worldwide

    Figure • The patent share of each AI technology type changed from 2012 to 2016. • In 2012, biological and knowledge-based models were the leaders in patented AI technologies. • However, from 2012 to 2016, the number of patents granted for specific mathematical models and other AI technologies rapidly increased, doubling from 2015 to 2016. 35 (Source: Fujii and Managi (2017))
  36. AI : Number of Patents/Scientific Papers by Year Number of

    Papers Number of Patents 0 50000 100000 150000 200000 250000 USA PEOPLES R CHINA GERMANY JAPAN ENGLAND France Canada ITALY SPAIN Australia 0 200 400 600 800 1000 1200 1400 United States Japan Europe (Patent Office) Germany Korea Unite Kingdom France China Taiwan Israel India Source: Web of Science Core Collection Source: PatentsView(USPTO)
  37. Robotics : Number of Patents/Scientific Papers by Year Number of

    Papers Number of Patents Source: Web of Science Core Collection Source: PatentsView(USPTO) 0 50 100 150 200 250 300 350 1990 1992 1994 1996 1998 2000 2002 2004 2006 2008 2010 2012 2014 2016 USA PEOPLES R CHINA GERMANY ENGLAND CANADA ITALY JAPAN FRANCE SPAIN AUSTRALIA 0 20 40 60 80 100 120 140 160 180 19761978198019821984198619881990199219941996199820002002200420062008201020122014 United States Japan Germany Korea France Sweden United Kingdom Italy China Europe (Patent Office) Switzerland
  38. Fact Findings • AI 分野はアメリカと中国が dominate している • 日本は1980年代後半から90年代はじめに集中的に投資したが, その後縮小

  39. Topic1: パネルデータに基づく 固定効果分析をPython で行う

  40. Extension; パネルデータ解析 • パネルデータ • N 個の主体(人,企業,団体,県,国など)の各々に関して T 期間に わたって観測された

    データ • パネルデータのメリット • (a) データ数が増えることにより,自由度が大きくなるので,推定精度 が向上する. • (b) 主体間の異質性をモデルに取り込むことは,単一の時系列,あるい はクロスセクションのみでは不可能であるが,それが可能になる. • (c) 主体間の異質性は,一般に観測不可能な主体固有の要因であり,そ のような要因以外の全体の関係を分析することが主目的ならば,固有 の要因を除去した分析が可能である. Source: https://www-cc.gakushuin.ac.jp/~20130021/ecmr/panel.pdf
  41. Extension; パネルデータ解析 • = + ′ + (i =1 ,···,N;

    t =1 ,···,T) • このとき, 誤差項 は以下の仮定を満たす. • = 0, = { 2 = かつ = のとき , 0(その他) • ; 未知の係数ベクトル • ′ ; 説明変数の p*1 確率ベクトル • 誤差項との独立性が仮定される (狭義外生性; strict exogeneity) • ; 主体 i に特有の個別効果 (individual effect) Source: https://www-cc.gakushuin.ac.jp/~20130021/ecmr/panel.pdf
  42. Extension; パネルデータ解析 • 固定効果モデル (Fixed Effect Model) • を定数のパラメータと仮定する •

    変動効果モデル (Random Effect Model) • を主体ごとに独立な確率変数と仮定し, • = 0, 2 = 2, = 0 を満たす。
  43. Extension; パネルデータ解析 • パネルデータ • 識別IDと時系列 が含まれている データ

  44. Extension; パネルデータ分析 • Linearmodels パッケージをインストールする # !pip install linearmodels

  45. Extension; パネルデータ分析 • Linearmodels から PanelOLS, RandomEffects パッケージをインポートする

  46. Extension; パネルデータ分析 • サンプルのデータセットを読み出す • データセットから, 年データを取り出しインデックスとしての 設定を行う

  47. Extension; パネルデータ分析 • データの構造

  48. Extension; パネルデータ分析 • 被説明変数と説明変数を指定し, 変動効果モデルを解析する

  49. Extension; パネルデータ分析 • 固定効果モデルを解析する

  50. まとめ • 因果推論は経済学のハナであります • ノンパラメトリックとパラメトリック • 教師あり学習と教師なし学習

  51. 9.3 決定木とSVM

  52. 今日のこりのトピック • 決定木分析 • SVM • スパース推定(Lasso) • ラッソ回帰/リッジ回帰 •

    SGD Regressor • Propensity Score Matching
  53. https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html

  54. https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html 今日の主なカバー範囲

  55. a. 決定木分析 • 入力したデータから特徴を学習し、構造を視覚化できる • データのカテゴリ化を行える • カテゴリカルデータと数値データの両方での解析が可能 • 決定木分析のアルゴリズム

    • ID3 • C4.5 • C5.0 • CART https://pythondatascience.plavox.info/scikit-learn/scikit- learn%E3%81%A7%E6%B1%BA%E5%AE%9A%E6%9C%A8%E5%88%86%E6%9E%90
  56. 決定木用の Notebook • Google Colaboratory 版 • https://colab.research.google.com/driv e/1_jrQhBfSh_mAKzVibjMvi2Ni4c4jAn 1l

  57. 3-3. 必要なライブラリをインポートする # tensorflow を tf として import する import

    tensorflow as tf # numpy や pandas など, 計算やデータ処理のライブラリを import する import numpy as np import pandas as pd # データ可視化のライブラリをインポートする import matplotlib.pyplot as plt # データセットの取得&処理のライブラリをインポートする from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split # インポートの確認 print(tf.__version__) print(np.__version__) print(pd.__version__)
  58. tensorflow • tensorFlow™ は、データフローグラフを 使用して数値計算を行うためのオープン ソースソフトウェアライブラリです。グ ラフ内のノードは数値演算を表し、グラ フのエッジはノード間でやり取りされた データの多次元配列(テンソル)を表し ます。柔軟性の高いアーキテクチャが採

    用されているため、単一のAPIを使用して、 デスクトップ、サーバーまたはモバイル 端末の1つ以上の CPU またはGPUに計算 機能をデプロイすることができます • TensorFlow は本来、Google のマシンイ ンテリジェンス研究組織内の Google Brain チームに参加している研究者やエン ジニアが機械学習や高度なニュートラル ネットワークの研究用に開発したもので したが、このシステムは汎用性が高く、 他の領域にも幅広く適用することができ ます。 • https://www.tensorflow.org/ https://data.wingarc.com/tensor-flow-16087
  59. 利用するデータ • Scikit-learn の住宅価格データ • ボストンの506地区について, 犯罪率や固定資産税率, 教師あたりの生 徒数などの属性値と, 住宅平均価格をテーブルに

    • 第二回目で利用したデータセットと同じ
  60. データセットの中身 CRIM 町ごとの人口一人あた りの犯罪率 AGE 1940年以前に建てられ た、所有者が住む建物 の割合 ZN 宅地の比率。25,000平

    方フィート以上のゾー ンで数えた値 DIS ボストンの5つの雇用中 心からの距離 INDUS 町ごとの非小売業の面 積比 RAD 放射状幹線道路からの 距離 CHAS チャールズ川に道がつ ながっているか TAX 固定資産税率 NOX NOx 濃度 PTRATIO 町ごとの教師あたりの 生徒数 RM 住宅あたり部屋数 B 町ごとの黒人比率 LSTAT 低階層人口の比率 MEDV 所有者が住む住宅の価 値の中央値
  61. 重回帰分析での結果(第二回参照) • 出力結果

  62. 3-4. データセットを読み込む # データの読み込み boston = load_boston() # Pandasのデータフレーム形式へ変換 df

    = pd.DataFrame(boston.data, columns=boston.feature_names) df['target'] = boston.target # データの最初の5行を表示 df.head()
  63. 3-4. データセットを読み込む # 取り出したデータセットを, 特徴量 (回帰分析 における説明変数)とターゲット (回帰分析にお ける被説明変数) に切り分ける

    X_data = np.array(boston.data) y_data = np.array(boston.target) # 1行目のデータの特徴量(X)とターゲット (y)を確認 print(X_data[0:1]) print(y_data[0:1])
  64. 3-5. データの正規化を行う # 正規化 # 平均0, 分散1 となるように def norm(data):

    mean = np.mean(data, axis=0) std = np.std(data, axis=0) return (data - mean) / std # データを正規化したものに入れ替える # 正規化されたデータを確認する X_data = norm(X_data) print(X_data[0:1])
  65. 3-6. データセットの整形 # 1を追加する前のサイズを確認する print(X_data.shape) # 1の行を作成する ones = np.ones((506,

    1)) # 1の行をデータセットに追加する X_data = np.c_[ones, X_data] X_data.shape
  66. 3-7. テストデータと訓練データへの切り 分けを行う # x とy について, 全体の2割をテストデータ として, 残りを訓練データへと切り分けする

    X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.2, random_state=42) y_train = y_train.reshape(404,1) y_test = y_test.reshape(102,1) #分割したデータの長さを確認する print(X_train.shape) print(y_train.shape) print(X_test.shape) print(y_test.shape)
  67. 3-8. 線形回帰モデルの設定を行う # 学習率とエポック(反復処理回数)を設定する learning_rate = 0.01 training_epochs = 1000

    # 特徴量の数 n_dim = X_data.shape[1] # 特徴量(X)とターゲット(y)のプレースホルダー # (作成される変数のための空の箱)を用意する X = tf.placeholder(tf.float32,[None,n_dim]) Y = tf.placeholder(tf.float32,[None,1]) # 係数(W)と定数項(b)の変数を指定する W = tf.Variable(tf.ones([n_dim,1])) b = tf.Variable(0.0)
  68. 3-9. コスト関数の設定および最適化を行う # 線形モデルを規定する y = tf.add(b, tf.matmul(X, W)) #

    コスト関数を設定する # 予測値と実際の値の差が極力最小化するよう に, # yの値とY の値の差分を取る cost = tf.reduce_mean(tf.square(y - Y)) # 最適化を行う training_step = tf.train.GradientDescentOptimizer(learning_rat e).minimize(cost)
  69. 3-10. モデルを実行し, 誤差を確認する # 初期化 init = tf.global_variables_initializer() # モデルの訓練を開始する

    sess = tf.Session() sess.run(init) # cost_history 変数のために空の値を入れておく cost_history=0 # for文を使って, 学習ごとの誤差の値を # cost_history の配列に放り込んでいく for epoch in range(training_epochs): sess.run(training_step, feed_dict={X:X_train, Y:y_train}) cost_history = np.append(cost_history, sess.run(cost, feed_dict={X:X_train, Y:y_train})) if epoch % 1000 == 0: W_val = sess.run(W) b_val = sess.run(b) # 誤差(cost)を確認 print(cost_history[1]) print(cost_history[50]) print(cost_history[100]) print(cost_history[1000]) ←誤差が次第に減っていく
  70. 3-11. 学習に基づく推計結果と, 実際の値 との比較を行う # テストデータを使って予測を行う pred_test = sess.run(y, feed_dict={X:

    X_test}) # 予測した価格と実際の価格の比較を行う pred = pd.DataFrame({"実際の不動産価格 ":y_test[:,0], "予測した不動産価格 ":pred_test[:,0], "差分":y_test[:,0]- pred_test[:,0]}) pred.head()
  71. 3-12. 散布図をプロットしてみる import seaborn as sns sns.jointplot(y_test[:,0],pred_test[:,0])

  72. 3-13. 決定木モデルの作成 #決定木モデルの作成を行う #sklearn より tree パッケージをインポートする from sklearn import

    tree #DesisionTreeRegressor でモデルを構築する #木の深さは3 にする (max_depth=3) clf = tree.DecisionTreeRegressor(max_depth=3) #X と y それぞれのtrain データで計測を行い clf = clf.fit(X_train, y_train) #X_test 値に基づき予測を行う pred = clf.predict(X_test)
  73. 3-13. 決定木モデルの作成 #pydotplus をインポートする import pydotplus #StringIO をインポートする from sklearn.externals.six

    import StringIO dot_data = StringIO() #決定木を図示化する tree.export_graphviz(clf, out_file=dot_data, filled=True, rounded=True) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) #Notebook 上に表示する from IPython.display import Image Image(graph.create_png())
  74. 決定木

  75. 決定木(n=5)

  76. 決定木 (n=7)

  77. 3-14. どの変数が作用するか確認 import matplotlib.pyplot as plt %matplotlib inline features =

    df.columns importances = clf.feature_importances_ indices = np.argsort(importances) plt.figure(figsize=(6,6)) plt.barh(range(len(indices)), importances[indices], color='b', align='center') plt.yticks(range(len(indices)), features[indices]) plt.show() AGE が寄与することが確認できる
  78. 3-15. 回帰モデルの可視化 from sklearn.linear_model import Ridge from yellowbrick.regressor import ResidualsPlot

    model = Ridge() visualizer = ResidualsPlot(model) visualizer.fit(X_train, y_train) # テストデータとの比較を行う visualizer.score(X_test, y_test) visualizer.poof();
  79. b. SVM モデルの構築 • “学習データに対する最小の距離を 最大化するような直線(超平面)を見 つける” • それぞれのグループの中で、最も境 界線に近い点

    (サポートベクター) との距離 (マージン) が最大化する ように線を引く http://labs.eecs.tottori- u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/ py_ml/py_svm/py_svm_basics/py_svm_basics.html
  80. 3.16 SVM モデルの構築 #svm のテストをする # データセットの取得&処理のライブラリをイン ポートする from sklearn.svm

    import LinearSVC from sklearn.model_selection import train_test_split from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer() # x とy について, テストデータと訓練データへ の切り分けを行う X_train, X_test, y_train, y_test = train_test_split( cancer.data, cancer.target, stratify = cancer.target, random_state=0)
  81. 3.17 SVM モデルの構築(2) from sklearn.preprocessing import StandardScaler #標準化 sc =

    StandardScaler() sc.fit(X_train) X_train_std = sc.transform(X_train) X_test_std = sc.transform(X_test) #クラスの初期化と学習 model = LinearSVC() model.fit(X_train_std, y_train)
  82. 3.18 SVM モデルの構築(3) print('正解率 (train):{:.3f}'.format(model.sco re(X_train_std, y_train))) print('正解率 (test):{:.3f}'.format(model.scor e(X_test_std,

    y_test)))
  83. まとめ • 学習データと教師データに分けて分析しよう • 学習率を高めていこう。 • っていうのが統計学や計量経済学でやってたアプローチと ちょっと違う気がします。

  84. 9.4 スパース推定 と PSM

  85. c. スパース推定(Lasso) • Lasso(Least absolute shrinkage and selection operator); •

    モデル構築と変数選択を自動的に行う • サンプルサイズより特徴量が大きな状況でも実行できる https://stats.biopapyrus.jp/sparse-modeling/lasso.html
  86. c-2. スパース推定(lasso) • 目的変数は中心化, 説明変数は標準化 {N(0,1)} する • Lasso(least absolute

    shrinkage and selection operator) t は調整パラメータで, given • ラグランジュの未定乗数法で書き直すと • መ = 1 2 − σ =1 2 2 + σ =1 λは正則化パラメータ 引用: (Tibshirani 1996), (川野 2018)
  87. d. ラッソ回帰/リッジ回帰 • 線形回帰と違い, 過学習を防ぐためのモデル • 回帰関数の推定時, モデルの複雑さを示す項を損失関数 (cost function)

    に追加し, それを含め誤差を最小化するように回帰回 数を指定する • 損失関数 • σ =1 ( − ( ))2+ σ=1 • 二項目を正則化項と呼ぶ • M; 変数の数, w: 重み付け係数, λ: 正則化パラメータ • q=1 のときラッソ回帰, q=2 のときリッジ回帰と呼ぶ
  88. c-3. スパース推定(lasso) Lasso 推定 Ridge 推定 ・解を範囲内で探索する 1 = −

    1 1 − 2 2 2 2 2 = − 1 1 − 2 2 2 2 3 = − 1 1 − 2 2 2 2 最小二乗推定量 引用: (Tibshirani 1996), (川野 2018)
  89. 3.20 Lasso+αの実習 • 使うデータ • FIFA 19 データ • せっかくパラメータがたくさんあったので,

    Lasso で自動的に選択して みましょう
  90. 利用する Notebook • Jupyter Notebook バージョン • https://www.dropbox.com/s/ehn3rvbu66qh0ig/fifa19%20%E3%81% AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E5%8D%98 %E5%9B%9E%E5%B8%B0%E3%81%A8%E9%87%8D%E5%9B%9E%E

    5%B8%B0%E5%88%86%E6%9E%90%E3%81%A8%E6%95%99%E5%B 8%AB%E3%81%82%E3%82%8A%E5%AD%A6%E7%BF%92%E3%82% 92%E8%A1%8C%E3%81%A3%E3%81%9F%E7%B5%90%E6%9E%9C.i pynb?dl=0 • データセット • https://www.dropbox.com/s/e15f6z9swkim9t1/data3.xlsx?dl=0
  91. 利用するNotebook • Google Colaboratory バージョン • https://colab.research.google.com/drive/1h7NY4ByUp5MkB1- eU__Lp8jAwTMLTFiT • データセット

    data3.csv • https://www.dropbox.com/s/pghylqdgvruxj8h/data3.csv?dl=0
  92. 3.21 Lasso (続き) ※. データを読み込むところは省略 利用するパラメータを指定する 変数リストから, 被説明変数を取り出す 異常値を抜き取る StandardScaler

    で, データの正規化を行う 念の為に、相関係数を見てみる
  93. とりあえず相関係数をプロットする

  94. 相関係数のプロット • Yellowbrick を用いる • X_test の結果を表示する

  95. 3.22 Lasso (続き) • 教師データと実データに分割する

  96. 3.23 SGD Regressor • SGD Regressor を適用してみる • 定数項と係数がプロットされる.

  97. 3.24 Lasso (続き) αの値をそれぞれ, 0.01, 0.1, 1 にしたときの精度と 係数をプロットする

  98. 3.25 Lasso(続き) • 出力結果 • αの値によって使われる特徴量が違う • 精度はあまり向上していない様子

  99. 3.26 Lasso (続き) • 使われているパラメータを確認 する • Alpha=1 のとき •

    Age; -1.89684646 • Reputation; 11.08361536 • least_contract; 0.14480343 • Overall; 7.20388477 線形回帰と結果がそんなにかわらな い • Alpha=0.1 のとき • age; -3.47603239 • reputation; 11.72772306 • least_contract; 0.5582404 • overall; 7.89572688 • finishing; 0.11362631 • Balance; 0.70103772 • ShotPower; 0.13964463 • stamina; -0.15779715 • Jumping; -0.14810666 • Strength; 0.04932909 • LongShots; -0.06731084 攻撃系のパラメータが高いことが給 与には寄与している?
  100. 3.27 Lasso(続き) • 利用された変数の影響度合いを確認する • やはり年齢は重要なパラメータに見える

  101. 3.28 FIFA データでも決定木を書いてみよう • 下ごしらえ; Jupyter でTerminal を開く

  102. 3.29 FIFAデータでも決定木を書いてみよ う(cont.) • conda install graphviz • pip install

    graphviz をそれぞれ実行する
  103. 3.30 FIFA データでも決定木を書いてみよ う(cont.) • DecisionTreeClassifier パッケージをインポート • Entropy を分岐条件として指定する

    • (wage の)正解率は32%程度
  104. 3.31 FIFA データでも決定木を書いてみよ う • 決定木を描画する • Graphviz の dot

    へのパスを個別に指定する (Windowsと Mac で記法が異なるので注意)
  105. 3.32 FIFA データでも決定木を書いてみよ う(cont.) • 出力結果

  106. 3.33 モデルの決定要因の確認 • 先程と同じ • 出力結果

  107. e. 回帰モデルの評価指標 • 平均二乗誤差 • 予測値と正解の差(残差)をサンプル毎に足し上げ, サンプルサイズで割る (Mean Squared Error;

    MSE) • 平均絶対誤差 • 残差の絶対値をサンプルごとに足し上げ、最後にサンプルサイズで割る (Mean Absolute Error; MAE) • 外れ値の影響を受けにくい • Median Absolute Error (MedAE) • 残差の絶対値の Median • 決定係数 • 検証データの平均値で予測をした場合の残差平方和 (Sum of Squared Total; SST) と, モデルの残差平方和 (Sum of Squared Errors; SSE) の比率. R2 = 1 – SSE/SST. 誤差がすべてなくなれば1.0, 平均値の予測と同等の場合 0.0 とな る.
  108. 3.34 モデルの評価 • 線形の重回帰モデル, リッジ回帰モデル, 決定木モデル, 線形サ ポートベクター回帰 (LinearSVR) でモデルを構築する.

  109. 3.35 モデルの評価(続き) • MSE, MAE, MedAE, R2 をそれぞれ計算する.

  110. 3.36 モデルの評価(続き) • リッジ回帰モデルのR2 値がもっとも高い

  111. 4. 傾向スコアマッチング • 同じ「対象傾向」を持つリストを対照 群から抽出し、比較を行う Treated Group Control Group 実験対象

    今回は(も)、FIFA19 のデータで解析してみましょう。
  112. 4.傾向スコアマッチング • 左利きと右利きで、Reputation に差があるかどうか

  113. 4. 傾向スコアマッチング • 利用するデータを指定する • FIFA19 の、Lasso や回帰分析に用いたものと同じデータを利 用する

  114. 4. 傾向スコアマッチング • 作成した equation_df3 から foot と reputation を取り出

    す • 重回帰分析で行ったように、 null 値を除去する • 傾向スコアを求めるために, 被説明変数をfoot, 説明変数を その他のパラメータにして, ロジットモデルを回す
  115. 4. 傾向スコアマッチング • 傾向スコアの出力結果 (ps) を確認する • データが完備的に揃っている、 18,206選手についてスコアが 計算出来ている

  116. 4. 傾向スコアマッチング • Result.predict の値をps に放 り込む • Foot と

    Reputation と傾向ス コアの値を table に放り込み、 ラベルをつける
  117. 4. 傾向スコアマッチング • 等差数列をnp.arange で作り、0.01 ごとの値でマッチン グさせる • 利き足グループ間での値を比較する

  118. 4. 傾向スコアマッチング(cont.) • 同じセッティングで、今度は wage で比較してみる

  119. 4. 傾向スコアマッチング(cont.) • 結果は違う感じに

  120. 4. 傾向スコアマッチング • 左足と右足グループを比較すると、 • レピュテーションは -1.3パーセント左足グループのほうが低 く • 給料は

    4.0% 左足グループのほうが高い • 左足のフットボールプレイヤーは希少性が高いので、同 じような能力を持ってても高いサラリーになりやすい?
  121. 今日のまとめ • 経済学徒として機械学習なアプローチをどう使う? • 卒論や修論や博論で定量的な分析を使うのであれば、まずはコンベン ショナルな手段 (線形な回帰分析や主成分分析 etc…) でも解析したほ うが手っ取り早い

    (nearly equal Stata or R で済む部分でこなせるかど うか) • ただし、Lasso や決定木などを使えたほうが, ビッグデータ解析には向 いている (see sklearn のhack tree) • 道具は必要な場所とタイミングで使いましょう
  122. Extension • 『東京大学のデータサイエンティスト養成講座』 • https://blog.ikedaosushi.com/entry/2019/05/16/192708 • https://github.com/GoogleCloudPlatform/gcp-getting- started-lab- jp/tree/master/machine_learning/cloud_ai_building_blocks

  123. 参考文献 • https://www.codexa.net/tensorflow-for-begginer/ • http://tekenuko.hatenablog.com/entry/2016/09/19/214330 • http://www.randpy.tokyo/entry/python_random_forest • FUJII Hidemichi,

    MANAGI Shunsuke (2017) «Trends and Priority Shifts in Artificial Intelligence Technology Invention: A global patent analysis», RIETI Discussion Paper Series 17-E-066, https://www.rieti.go.jp/jp/publications/dp/17e066.pdf • The Economics of Artificial Intelligence: An Agenda, https://www.nber.org/books/agra-1
  124. 参考文献(2) • 確率的勾配降下法のメリットについて考えてみた • https://qiita.com/koshian2/items/028c457880c0ec576e27 • Python で Lasso を実装

    • https://qiita.com/kotamatsukun/items/d09f09f23308627b42ab • LASSO 回帰 / Python • https://stats.biopapyrus.jp/sparse-modeling/python-glmnet.html • Lasso Regressor(回帰分析)【Pythonとscikit-learnで機械 学習:第15回】 • http://neuro-educator.com/ml15/
  125. 参考文献(3) • SDG Regressor(回帰分析)【Pythonとscikit-learnで機械学 習:第14回】 • http://neuro-educator.com/ml14/ • 【Python】Pythonではじめる機械学習のgraphvizでエラーが出 るときの対処方法

    • https://kazusa-pg.com/python-install-graphviz/ • pydotplusでgraphvizのパスが解決できない場合の対処法 • https://qiita.com/wm5775/items/1062cc1e96726b153e28 • macOS Sierraでpip install tweepyしたらエラー出たので対処 した • https://qiita.com/ArtemisHaD/items/0fb4e32c44c358c9ef0c
  126. 参考文献(4) • Tibshirani, Robert (1996) Regression Shrinkage and Selection via

    the Lasso, Journal of the Royal Statistical Society. Series B, 58, 1, pp. 267-288, https://www.jstor.org/stable/2346178 • 川野秀一(2019) スパース推定に基づく統計モデリング, HIAS Health ビッグデータ・ICT勉強会 • 川野秀一・松井秀俊・廣瀬慧 (2018) スパース推定法による統 計モデリング, 統計学 One Point • http://rcommanderdeigakutoukeikaiseki.com/propensity_sco re.html • https://www.randpy.tokyo/entry/python_propensity_score
  127. THANKS yasushi.hara@r.hit-u.ac.jp