SlideShare a Scribd company logo
1 of 12
Download to read offline
第 2 章 例題: カンニングした学生の割合
市東 亘
西南学院大学 経済学部
July 15, 2019
講義ノート: https://courses.wshito.com/semi2/2019-bayes-AI
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 1 / 12
概観
概観
テキスト「Python で体験するベイズ推論」pp.57–62
例題: カンニングをした学生の割合
▶ 分析の背後にある統計モデルを理解する.
▶ PyMC3 による実装方法を学ぶ.
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 2 / 12
分析の目的
分析の目的
目的
▶ 個人を特定できない方法でカンニングをしたか否かの標本を構築する.
⇒ Privacy Algorithm
▶ 構築した標本から,母集団のカンニング割合をベイズ推定する.
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 3 / 12
分析の目的
Privacy Algorithm
母集団
カンニング
カンニングなし
コイン投げ
サンプリング
表
裏
正直に回答
コイン投げ
表
裏
カンニングと回答
カンニングしてい
ないと回答
カンニング
カンニング
してない
観測可能な標本
カンニングしている人
の分布割合 = p
ˆp
1
2 p
1
2 (1 − p)
1
4
1
4
N 人人
・コイン投げの結果は観測できない.
・我々が知りたいのは   の事後分布.
・観測データから得られるのは  .ˆp
p
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 4 / 12
分析の目的
統計モデルの構築
▶ 我々が知りたいのは p の事後分布: f(p|D) ∝ f(D|p)f(p)
▶ 事前分布 f(p) は「理由不十分の原則」から一様分布を採用.
▶ 尤度 f(D|p) をどのように定義するか?
▶ 尤度はデータが与えられた時,その事象が生起する確率を求めるのに
使用する密度関数の式を,パラメータが所与でデータを変数と読み替
えたもの.
▶ したがって「カンニング」と回答したデータが得られた時,そのデー
タが得られる確率を計算する密度関数を尤度に指定する.
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 5 / 12
分析の目的
統計モデルの構築: 尤度の定義
▶ 尤度に与えるデータは何か?カンニングしたか否かの個別データ?
⇒ 回答の順番に意味はない!カンニング総数だけが意味を持つ!
▶ したがって使用する標本データはカンニング数 x.
▶ 我々が観測できるカンニング数 x はコイン投げ後のもの.
▶ コイン投げ後のカンニング数 x が標本総数 N に占める割合は,
1
2
p + 1
4
▶ したがって,標本データのカンニング数 x は確率 1
2
p + 1
4
の 2 項分布
に従う.
⇒ x ∼ ˆpx(1 − ˆp)N−x ただし,ˆp = 1
2
p + 1
4
.
▶ テキストの例では尤度に与える標本データ x は 35 としている.
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 6 / 12
分析の目的
ベイズモデル
f(p|D) ∝ f(D|p)f(p)
▶ 尤度: x ∼ ˆpx(1 − ˆp)N−x ただし,ˆp = 1
2
p + 1
4
.
▶ 事前分布: Uniform(0, 1)
▶ 標本数: N = 100
▶ 標本データ: x = 35
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 7 / 12
分析の目的
PyMC3 による実装
コード 1 カンニングした学生の割合
1 import numpy as np
2 import pymc3 as pm
3
4 with pm.Model() as model:
5 p = pm.Uniform("p", lower=0, upper=1) # 事前分布の定義
6 p_hat = 0.5*p + 0.25
7 x = pm.Binomial("x", n=100, p=p_hat, observed=35) # 尤度の定義
8 trace = pm.sample(40000)
9
10 pm.traceplot(trace["p"])
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 8 / 12
分析の目的
もう 1 つの推定方法
▶ 以上の推定方法はテキスト pp.61–62 の「もう一つの PyMC モデル」
に対応する.
▶ テキストの pp.57–60 の推定方法では,ˆp = 1
2
p + 1
4
の関係式を用い
ず,コイン投げをシュミレートすることで ˆp を計算している.
▶ observed_proportion() 関数で求めた ˆp の値を尤度の二項分布の確
率に設定している.
▶ ただし,シュミレーションで p の標本を作成する度に 100 回のコイン
投げが 2 回行われるため,計算に時間が掛かる.
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 9 / 12
分析の目的
PyMC3 によるもう 1 つの推定方法
コード 2 カンニングした学生の割合のもう 1 つの推定方法
1 import numpy as np
2 import pymc3 as pm
3
4 with pm.Model() as model2:
5 N = 100
6 p = pm.Uniform("p", lower=0, upper=1)
7 # ここからシュミレーションで p_hat を生成
8 true_answers = pm.Bernoulli("truths", p=p, shape=N,
9 testval=np.random.binomial(1, 0.5, N))
10 first_coin_flips = pm.Bernoulli("first_flips", p=0.5, shape=N,
11 testval=np.random.binomial(1, 0.5, N))
12 second_coin_flips = pm.Bernoulli("second_flips", p=0.5, shape=N,
13 testval=np.random.binomial(1, 0.5, N))
14 observed = first_coin_flips * true_answers + 
15 (1-first_coin_flips)*second_coin_flips
16 p_hat = observed.sum() / float(N)
17 # ここまで
18 x = pm.Binomial("x", n=N, p=p_hat, observed=35)
19 trace2 = pm.sample(40000)
20
21 pm.traceplot(trace2["p"])
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 10 / 12
分析の目的
PyMC3 コードの補足
▶ 確率変数を定義する分布関数の testval 引数は,確率変数の初期値を
設定する.
▶ pm.Bernoulli() の testval 引数を指定しないと,N 個の空のデー
タで初期化される.その場合,MCMC シュミレーションがうまくいか
ない.
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 11 / 12
分析の目的
パラメータの事後分布
市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 12 / 12

More Related Content

More from Wataru Shito

More from Wataru Shito (20)

演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
 
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
 
経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」
 
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
 
第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)
 
経済数学II 「第12章 制約つき最適化」
経済数学II 「第12章 制約つき最適化」経済数学II 「第12章 制約つき最適化」
経済数学II 「第12章 制約つき最適化」
 
マクロ経済学I 「第9章 総需要 I」
マクロ経済学I 「第9章 総需要 I」マクロ経済学I 「第9章 総需要 I」
マクロ経済学I 「第9章 総需要 I」
 
経済数学II 「第11章 選択変数が2個以上の場合の最適化」
経済数学II 「第11章 選択変数が2個以上の場合の最適化」経済数学II 「第11章 選択変数が2個以上の場合の最適化」
経済数学II 「第11章 選択変数が2個以上の場合の最適化」
 
マクロ経済学I 「第6章 開放経済の長期分析」
マクロ経済学I 「第6章 開放経済の長期分析」マクロ経済学I 「第6章 開放経済の長期分析」
マクロ経済学I 「第6章 開放経済の長期分析」
 
経済数学II 「第8章 一般関数型モデルの比較静学」
経済数学II 「第8章 一般関数型モデルの比較静学」経済数学II 「第8章 一般関数型モデルの比較静学」
経済数学II 「第8章 一般関数型モデルの比較静学」
 
マクロ経済学I 「第4,5章 貨幣とインフレーション」
マクロ経済学I 「第4,5章 貨幣とインフレーション」マクロ経済学I 「第4,5章 貨幣とインフレーション」
マクロ経済学I 「第4,5章 貨幣とインフレーション」
 
マクロ経済学I 「第3章 長期閉鎖経済モデル」
マクロ経済学I 「第3章 長期閉鎖経済モデル」マクロ経済学I 「第3章 長期閉鎖経済モデル」
マクロ経済学I 「第3章 長期閉鎖経済モデル」
 
経済数学II 「第7章 微分法とその比較静学への応用」
経済数学II 「第7章 微分法とその比較静学への応用」経済数学II 「第7章 微分法とその比較静学への応用」
経済数学II 「第7章 微分法とその比較静学への応用」
 
経済数学II 「第6章 比較静学と導関数の概念」
経済数学II 「第6章 比較静学と導関数の概念」経済数学II 「第6章 比較静学と導関数の概念」
経済数学II 「第6章 比較静学と導関数の概念」
 
マクロ経済学I 「マクロ経済分析の基礎知識」
マクロ経済学I 「マクロ経済分析の基礎知識」マクロ経済学I 「マクロ経済分析の基礎知識」
マクロ経済学I 「マクロ経済分析の基礎知識」
 
経済数学II 「第5章 線型モデルと行列代数 II」
経済数学II 「第5章 線型モデルと行列代数 II」経済数学II 「第5章 線型モデルと行列代数 II」
経済数学II 「第5章 線型モデルと行列代数 II」
 
マクロ経済学I 「第2章 マクロ経済学のデータ」
マクロ経済学I 「第2章 マクロ経済学のデータ」マクロ経済学I 「第2章 マクロ経済学のデータ」
マクロ経済学I 「第2章 マクロ経済学のデータ」
 
経済数学II 「第3章 経済学における均衡分析」
経済数学II 「第3章 経済学における均衡分析」経済数学II 「第3章 経済学における均衡分析」
経済数学II 「第3章 経済学における均衡分析」
 
経済数学II 「第4章 線型モデルと行列代数」
経済数学II 「第4章 線型モデルと行列代数」経済数学II 「第4章 線型モデルと行列代数」
経済数学II 「第4章 線型モデルと行列代数」
 

2019年 演習II.第2章 例題: カンニングした学生の割合

  • 1. 第 2 章 例題: カンニングした学生の割合 市東 亘 西南学院大学 経済学部 July 15, 2019 講義ノート: https://courses.wshito.com/semi2/2019-bayes-AI 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 1 / 12
  • 2. 概観 概観 テキスト「Python で体験するベイズ推論」pp.57–62 例題: カンニングをした学生の割合 ▶ 分析の背後にある統計モデルを理解する. ▶ PyMC3 による実装方法を学ぶ. 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 2 / 12
  • 3. 分析の目的 分析の目的 目的 ▶ 個人を特定できない方法でカンニングをしたか否かの標本を構築する. ⇒ Privacy Algorithm ▶ 構築した標本から,母集団のカンニング割合をベイズ推定する. 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 3 / 12
  • 4. 分析の目的 Privacy Algorithm 母集団 カンニング カンニングなし コイン投げ サンプリング 表 裏 正直に回答 コイン投げ 表 裏 カンニングと回答 カンニングしてい ないと回答 カンニング カンニング してない 観測可能な標本 カンニングしている人 の分布割合 = p ˆp 1 2 p 1 2 (1 − p) 1 4 1 4 N 人人 ・コイン投げの結果は観測できない. ・我々が知りたいのは   の事後分布. ・観測データから得られるのは  .ˆp p 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 4 / 12
  • 5. 分析の目的 統計モデルの構築 ▶ 我々が知りたいのは p の事後分布: f(p|D) ∝ f(D|p)f(p) ▶ 事前分布 f(p) は「理由不十分の原則」から一様分布を採用. ▶ 尤度 f(D|p) をどのように定義するか? ▶ 尤度はデータが与えられた時,その事象が生起する確率を求めるのに 使用する密度関数の式を,パラメータが所与でデータを変数と読み替 えたもの. ▶ したがって「カンニング」と回答したデータが得られた時,そのデー タが得られる確率を計算する密度関数を尤度に指定する. 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 5 / 12
  • 6. 分析の目的 統計モデルの構築: 尤度の定義 ▶ 尤度に与えるデータは何か?カンニングしたか否かの個別データ? ⇒ 回答の順番に意味はない!カンニング総数だけが意味を持つ! ▶ したがって使用する標本データはカンニング数 x. ▶ 我々が観測できるカンニング数 x はコイン投げ後のもの. ▶ コイン投げ後のカンニング数 x が標本総数 N に占める割合は, 1 2 p + 1 4 ▶ したがって,標本データのカンニング数 x は確率 1 2 p + 1 4 の 2 項分布 に従う. ⇒ x ∼ ˆpx(1 − ˆp)N−x ただし,ˆp = 1 2 p + 1 4 . ▶ テキストの例では尤度に与える標本データ x は 35 としている. 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 6 / 12
  • 7. 分析の目的 ベイズモデル f(p|D) ∝ f(D|p)f(p) ▶ 尤度: x ∼ ˆpx(1 − ˆp)N−x ただし,ˆp = 1 2 p + 1 4 . ▶ 事前分布: Uniform(0, 1) ▶ 標本数: N = 100 ▶ 標本データ: x = 35 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 7 / 12
  • 8. 分析の目的 PyMC3 による実装 コード 1 カンニングした学生の割合 1 import numpy as np 2 import pymc3 as pm 3 4 with pm.Model() as model: 5 p = pm.Uniform("p", lower=0, upper=1) # 事前分布の定義 6 p_hat = 0.5*p + 0.25 7 x = pm.Binomial("x", n=100, p=p_hat, observed=35) # 尤度の定義 8 trace = pm.sample(40000) 9 10 pm.traceplot(trace["p"]) 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 8 / 12
  • 9. 分析の目的 もう 1 つの推定方法 ▶ 以上の推定方法はテキスト pp.61–62 の「もう一つの PyMC モデル」 に対応する. ▶ テキストの pp.57–60 の推定方法では,ˆp = 1 2 p + 1 4 の関係式を用い ず,コイン投げをシュミレートすることで ˆp を計算している. ▶ observed_proportion() 関数で求めた ˆp の値を尤度の二項分布の確 率に設定している. ▶ ただし,シュミレーションで p の標本を作成する度に 100 回のコイン 投げが 2 回行われるため,計算に時間が掛かる. 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 9 / 12
  • 10. 分析の目的 PyMC3 によるもう 1 つの推定方法 コード 2 カンニングした学生の割合のもう 1 つの推定方法 1 import numpy as np 2 import pymc3 as pm 3 4 with pm.Model() as model2: 5 N = 100 6 p = pm.Uniform("p", lower=0, upper=1) 7 # ここからシュミレーションで p_hat を生成 8 true_answers = pm.Bernoulli("truths", p=p, shape=N, 9 testval=np.random.binomial(1, 0.5, N)) 10 first_coin_flips = pm.Bernoulli("first_flips", p=0.5, shape=N, 11 testval=np.random.binomial(1, 0.5, N)) 12 second_coin_flips = pm.Bernoulli("second_flips", p=0.5, shape=N, 13 testval=np.random.binomial(1, 0.5, N)) 14 observed = first_coin_flips * true_answers + 15 (1-first_coin_flips)*second_coin_flips 16 p_hat = observed.sum() / float(N) 17 # ここまで 18 x = pm.Binomial("x", n=N, p=p_hat, observed=35) 19 trace2 = pm.sample(40000) 20 21 pm.traceplot(trace2["p"]) 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 10 / 12
  • 11. 分析の目的 PyMC3 コードの補足 ▶ 確率変数を定義する分布関数の testval 引数は,確率変数の初期値を 設定する. ▶ pm.Bernoulli() の testval 引数を指定しないと,N 個の空のデー タで初期化される.その場合,MCMC シュミレーションがうまくいか ない. 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 11 / 12
  • 12. 分析の目的 パラメータの事後分布 市東 亘 (西南学院大学 経済学部) 第 2 章 例題: カンニングした学生の割合 July 15, 2019 12 / 12