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

#経済学のための実践的データ分析 12.1 機械学習(決定木とSVM)+最終レポート作業編

#経済学のための実践的データ分析 12.1 機械学習(決定木とSVM)+最終レポート作業編

一橋大学 経済学部 28 番教室
#経済学のための実践的データ分析
12.1 機械学習(決定木とSVM)+最終レポート作業編

yasushihara

July 11, 2019
Tweet

More Decks by yasushihara

Other Decks in Education

Transcript

  1. 最終レポートグループ分け • グループA • 2117235x • 2117265z • 2117224c •

    2117121b • グループB • 1118198c • 1118123a • 2118097a • 2118119m • グループC • 2116093u • 2117149b • 2117281b • グループD • 2115015z • 2115360k • 2116255u • グループE • 2118135u • 4116220z • 2115037a • 2116264s
  2. まとめと最終報告レポート • テーマ • 「◦◦のための実践的データ分析」 • 卒論や修論や博論の作成の入り口になるような、データの調達とその データの解析を, 講義で取り上げたデータセットおよび分析手法で実施 する

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

    Docs で用意します。 • 評価基準 • (A.) グループ内の役割分担 (B.) データセットのユニークさおよび、それが適切に処理されているか (C.) 分析手法のユニークさおよび、それが適切に解析されているか (D.) プレゼンテーションのユニークさ (E.) 質疑応答にうまくリプライすることが出来ているか • 納品物 • プレゼンテーションに利用したファイル (Word か Powerpoint か Prezi か etc…) を, Manaba にアップロードすること • 発表 • 2019/7/18
  4. 「定量分析の業務フロー」 2019/7/11 14 リサーチクエス チョンを決める 必要なデータを 探す 論文データ/書誌 情報を使う 特許データ/書誌

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

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

    データ一辺倒の観のある米国の定量分析 (Fleming et al. 2007) を補完する意味で、 詳細なフィールド調査に基づく豊かな実証 的知見を提供し得る。さらに Watts 等(1998, 1999, 2003) がシ ミュレーションで数学的に立証したスモールワールドの知見が、 現実に応用可 能なのは、実効的にコミュニティー・キャピタル に支えられた社会ネットワークに限定さ れることも示唆され る。 ” 2019/7/11 16
  7. プレゼンの雛形 • 表紙 • イントロダクション • 先行研究 • 問い •

    仮説 • 集めたデータセット • データ解析結果 • 考察とインプリケーション • プレゼンの形式はお任せします • パワーポイント • Prezi • Tableau ストーリー など, プレゼンを行うにあたり最適 だと思われる手法をご選択ください
  8. 最終レポート回のタイムスケジュール • 最初に; 10:45-10:50 1. グループA 10:50-11:00 11:00-11:05 2. グループB

    11:05-11:15 11:15-11:20 3. グループC 11:20-11:30 11:30-11:35 4. グループD 11:35-11:45 11:45-11:50 5. グループE 11:50-12:00 12:00-12:05 • 最後に; 12:05-12:10
  9. 今日の最終レポートに向けたディスカッ ション (講義の最後の30分くらい) • 役割分担を決める • プレゼンの方法を決める • 何を問いにするのか? •

    先行研究として何が挙げられて, 仮説としてどのような内容が 提起できるか。 • データセットは何か?取得可能か? • データはどのように解析するのか? • 結論として何が言えるのか?
  10. 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 . 30 (Source: Fuji and Managi (2017))
  11. 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. 31 (Source: Fujii and Managi (2017))
  12. 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)
  13. 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
  14. 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__)
  15. tensorflow • tensorFlow™ は、データフローグラフを 使用して数値計算を行うためのオープン ソースソフトウェアライブラリです。グ ラフ内のノードは数値演算を表し、グラ フのエッジはノード間でやり取りされた データの多次元配列(テンソル)を表し ます。柔軟性の高いアーキテクチャが採

    用されているため、単一のAPIを使用して、 デスクトップ、サーバーまたはモバイル 端末の1つ以上の CPU またはGPUに計算 機能をデプロイすることができます • TensorFlow は本来、Google のマシンイ ンテリジェンス研究組織内の Google Brain チームに参加している研究者やエン ジニアが機械学習や高度なニュートラル ネットワークの研究用に開発したもので したが、このシステムは汎用性が高く、 他の領域にも幅広く適用することができ ます。 • https://www.tensorflow.org/ https://data.wingarc.com/tensor-flow-16087
  16. データセットの中身 CRIM 町ごとの人口一人あた りの犯罪率 AGE 1940年以前に建てられ た、所有者が住む建物 の割合 ZN 宅地の比率。25,000平

    方フィート以上のゾー ンで数えた値 DIS ボストンの5つの雇用中 心からの距離 INDUS 町ごとの非小売業の面 積比 RAD 放射状幹線道路からの 距離 CHAS チャールズ川に道がつ ながっているか TAX 固定資産税率 NOX NOx 濃度 PTRATIO 町ごとの教師あたりの 生徒数 RM 住宅あたり部屋数 B 町ごとの黒人比率 LSTAT 低階層人口の比率 MEDV 所有者が住む住宅の価 値の中央値
  17. 3-4. データセットを読み込む # データの読み込み boston = load_boston() # Pandasのデータフレーム形式へ変換 df

    = pd.DataFrame(boston.data, columns=boston.feature_names) df['target'] = boston.target # データの最初の5行を表示 df.head()
  18. 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])
  19. 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])
  20. 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)
  21. 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)
  22. 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)
  23. 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]) ←誤差が次第に減っていく
  24. 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()
  25. 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)
  26. 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())
  27. 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 が寄与することが確認できる
  28. 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();
  29. 3.16 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
  30. 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)
  31. 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)
  32. 成績評価(1) • 平常レポート (40パーセント; 必須) • 講義計画に示したように、複数の回で学生にはレポートを課します。 レポートは Word/PowerPoint形式のメールあるいは, github

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

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

    10 • レポート3; max 15 • 最終レポート • 40点 • 最終レポートの360°評価 • 10点 • 投票システムから集計したデータを按分します
  35. 参考文献 • 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