差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
mselab:2012:stat:week2:r2 [2012/12/11 14:15] – [決定木分析] watalu | mselab:2012:stat:week2:r2 [不明な日付] (現在) – 外部編集 (不明な日付) 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
===== 統計工学 2週目 ===== | ===== 統計工学 2週目 ===== | ||
==== はじめに ==== | ==== はじめに ==== | ||
+ | === 連絡 2012.12.11 === | ||
+ | |||
+ | * 自分で頑張って、とお願いした、回帰分析と決定木分析のコードを追記しました。 | ||
+ | * このページを実験時間中に改訂しましたが、[[http:// | ||
+ | * TICデータの[[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
=== 概要 === | === 概要 === | ||
行 13: | 行 22: | ||
* 先週に続いてデータの把握、特にV86を中心に。 | * 先週に続いてデータの把握、特にV86を中心に。 | ||
- | * 回帰分析の2つの課題(自習、練習に相当) | + | * 回帰分析の2つの課題、同じ課題を決定木も(自習、練習に相当) |
* 解析データを用いた1つの課題(本番) | * 解析データを用いた1つの課題(本番) | ||
に取り組んで貰う。 | に取り組んで貰う。 | ||
- | |||
==== 実験の流れ ==== | ==== 実験の流れ ==== | ||
行 103: | 行 111: | ||
**問2:このplot関数の出力結果を、配付資料と対比させて理解せよ。** | **問2:このplot関数の出力結果を、配付資料と対比させて理解せよ。** | ||
- | == 重回帰分析 == | + | === 重回帰分析 |
表5.1のデータは次のように入力する。 | 表5.1のデータは次のように入力する。 | ||
行 134: | 行 142: | ||
**問4:このplot関数の出力結果を、配付資料と対比させて理解せよ。** | **問4:このplot関数の出力結果を、配付資料と対比させて理解せよ。** | ||
- | == 重回帰応用(水準変数が説明変数に含まれる場合) == | + | === 重回帰応用(水準変数が説明変数に含まれる場合) |
上のデータを、広さを「広め(w)」「狭め(n)」とし、築年数も「新しめ(new)」「古め(old)」にする | 上のデータを、広さを「広め(w)」「狭め(n)」とし、築年数も「新しめ(new)」「古め(old)」にする | ||
行 153: | 行 161: | ||
</ | </ | ||
- | === 時間内課題2:決定木分析の自習 === | + | ==== 時間内課題2:決定木分析の自習 |
まず、次の一行を実行しておく。 | まず、次の一行を実行しておく。 | ||
行 167: | 行 175: | ||
print(rpart.4.1) | print(rpart.4.1) | ||
summary(rpart.4.1) | summary(rpart.4.1) | ||
+ | plot(rpart.4.1) | ||
+ | text(rpart.4.1) | ||
+ | </ | ||
+ | |||
+ | < | ||
rpart.5.1 <- rpart(y~x.1+x.2, | rpart.5.1 <- rpart(y~x.1+x.2, | ||
print(rpart.5.1) | print(rpart.5.1) | ||
summary(rpart.5.1) | summary(rpart.5.1) | ||
+ | plot(rpart.5.1) | ||
+ | text(rpart.5.1) | ||
+ | </ | ||
+ | |||
+ | < | ||
rpart.5.1.c <- rpart(y~x.1+x.2, | rpart.5.1.c <- rpart(y~x.1+x.2, | ||
print(rpart.5.1.c) | print(rpart.5.1.c) | ||
summary(rpart.5.1.c) | summary(rpart.5.1.c) | ||
+ | plot(rpart.5.1.c) | ||
+ | text(rpart.5.1.c) | ||
</ | </ | ||
- | **問6:これらがどのようなモデルか、データと出力に照らして検討せよ。** | + | **問6:これらがどのようなモデルか、データと出力に照らして検討せよ。** |
==== 課題:保険会社の顧客データのデータマイニング ==== | ==== 課題:保険会社の顧客データのデータマイニング ==== | ||
行 209: | 行 228: | ||
[[http:// | [[http:// | ||
- | |変数|分類|メモ| | + | ^変数^分類^メモ^ |
|V1|顧客分類2|L0でコード化されている、数字の大きさに意味なし| | |V1|顧客分類2|L0でコード化されている、数字の大きさに意味なし| | ||
|V2|住居数|大きいほど住む箇所が多い| | |V2|住居数|大きいほど住む箇所が多い| | ||
行 242: | 行 261: | ||
</ | </ | ||
+ | == 変数詳細 == | ||
+ | |||
+ | ^Nr^Name^Description Domain^ | ||
+ | |V1|MOSTYPE|Customer Subtype see L0| | ||
+ | |V2|MAANTHUI|Number of houses 1 - 10| | ||
+ | |V3|MGEMOMV|Avg size household 1 - 6| | ||
+ | |V4|MGEMLEEF|Avg age see L1| | ||
+ | |V5|MOSHOOFD|Customer main type see L2| | ||
+ | |V6|MGODRK|Roman catholic see L3| | ||
+ | |V7|MGODPR|Protestant ...| | ||
+ | |V8|MGODOV|Other religion| | ||
+ | |V9|MGODGE|No religion (無宗教)| | ||
+ | |V10|MRELGE|Married (既婚)| | ||
+ | |V11|MRELSA|Living together (同居)| | ||
+ | |V12|MRELOV|Other relation (その他)| | ||
+ | |V13|MFALLEEN|Singles (独身)| | ||
+ | |V14|MFGEKIND|Household without children (子供のいない世帯)| | ||
+ | |V15|MFWEKIND|Household with children (子供のいる世帯)| | ||
+ | |V16|MOPLHOOG|High level education (高等教育)| | ||
+ | |V17|MOPLMIDD|Medium level education (中等教育)| | ||
+ | |V18|MOPLLAAG|Lower level education (初等教育)| | ||
+ | |V19|MBERHOOG|High status| | ||
+ | |V20|MBERZELF|Entrepreneur| | ||
+ | |V21|MBERBOER|Farmer (農業)| | ||
+ | |V22|MBERMIDD|Middle management (中間管理職)| | ||
+ | |V23|MBERARBG|Skilled labourers (熟練労働者)| | ||
+ | |V24|MBERARBO|Unskilled labourers (非熟練労働者)| | ||
+ | |V25|MSKA|Social class A| | ||
+ | |V26|MSKB1|Social class B1| | ||
+ | |V27|MSKB2|Social class B2| | ||
+ | |V28|MSKC|Social class C| | ||
+ | |V29|MSKD|Social class D| | ||
+ | |V30|MHHUUR|Rented house| | ||
+ | |V31|MHKOOP|Home owners| | ||
+ | |V32|MAUT1|1 car (保有車1台)| | ||
+ | |V33|MAUT2|2 cars (保有車2台)| | ||
+ | |V34|MAUT0|No car (保有車なし)| | ||
+ | |V35|MZFONDS|National Health Service| | ||
+ | |V36|MZPART|Private health insurance| | ||
+ | |V37|MINKM30|Income < 30.000| | ||
+ | |V38|MINK3045|Income (収入) 30-45.000| | ||
+ | |V39|MINK4575|Income (収入) 45-75.000| | ||
+ | |V40|MINK7512|Income (収入) 75-122.000| | ||
+ | |V41|MINK123M|Income (収入) > | ||
+ | |V42|MINKGEM|Average income (平均収入)| | ||
+ | |V43|MKOOPKLA|Purchasing power class| | ||
+ | |V44|PWAPART|Contribution (契約高) private third party insurance see L4| | ||
+ | |V45|PWABEDR|Contribution (契約高) third party insurance (firms) ...| | ||
+ | |V46|PWALAND|Contribution (契約高) third party insurane (agriculture)| | ||
+ | |V47|PPERSAUT|Contribution (契約高) car policies| | ||
+ | |V48|PBESAUT|Contribution (契約高) delivery van policies| | ||
+ | |V49|PMOTSCO|Contribution (契約高) motorcycle/ | ||
+ | |V50|PVRAAUT|Contribution (契約高) lorry policies| | ||
+ | |V51|PAANHANG|Contribution (契約高) trailer policies| | ||
+ | |V52|PTRACTOR|Contribution (契約高) tractor policies| | ||
+ | |V53|PWERKT|Contribution (契約高) agricultural machines policies | | ||
+ | |V54|PBROM|Contribution (契約高) moped policies| | ||
+ | |V55|PLEVEN|Contribution (契約高) life insurances| | ||
+ | |V56|PPERSONG|Contribution (契約高) private accident insurance policies| | ||
+ | |V57|PGEZONG|Contribution (契約高) family accidents insurance policies| | ||
+ | |V58|PWAOREG|Contribution (契約高) disability insurance policies| | ||
+ | |V59|PBRAND|Contribution (契約高) fire policies| | ||
+ | |V60|PZEILPL|Contribution (契約高) surfboard policies| | ||
+ | |V61|PPLEZIER|Contribution (契約高) boat policies| | ||
+ | |V62|PFIETS|Contribution (契約高) bicycle policies| | ||
+ | |V63|PINBOED|Contribution (契約高) property insurance policies| | ||
+ | |V64|PBYSTAND|Contribution (契約高) social security insurance policies| | ||
+ | |V65|AWAPART|Number of (契約口数) private third party insurance 1 - 12| | ||
+ | |V66|AWABEDR|Number of (契約口数) third party insurance (firms) ...| | ||
+ | |V67|AWALAND|Number of (契約口数) third party insurane (agriculture)| | ||
+ | |V68|APERSAUT|Number of (契約口数) car policies| | ||
+ | |V69|ABESAUT|Number of (契約口数) delivery van policies| | ||
+ | |V70|AMOTSCO|Number of (契約口数) motorcycle/ | ||
+ | |V71|AVRAAUT|Number of (契約口数) lorry policies| | ||
+ | |V72|AAANHANG|Number of (契約口数) trailer policies| | ||
+ | |V73|ATRACTOR|Number of (契約口数) tractor policies| | ||
+ | |V74|AWERKT|Number of (契約口数) agricultural machines policies| | ||
+ | |V75|ABROM|Number of (契約口数) moped policies| | ||
+ | |V76|ALEVEN|Number of (契約口数) life insurances| | ||
+ | |V77|APERSONG|Number of (契約口数) private accident insurance policies| | ||
+ | |V78|AGEZONG|Number of (契約口数) family accidents insurance policies| | ||
+ | |V79|AWAOREG|Number of (契約口数) disability insurance policies| | ||
+ | |V80|ABRAND|Number of (契約口数) fire policies| | ||
+ | |V81|AZEILPL|Number of (契約口数) surfboard policies| | ||
+ | |V82|APLEZIER|Number of (契約口数) boat policies| | ||
+ | |V83|AFIETS|Number of (契約口数) bicycle policies| | ||
+ | |V84|AINBOED|Number of (契約口数) property insurance policies| | ||
+ | |V85|ABYSTAND|Number of (契約口数) social security insurance policies| | ||
+ | |V86|CARAVAN|Number of (契約口数) mobile home policies 0 - 1| | ||
== 各変数のコーディング == | == 各変数のコーディング == | ||
行 247: | 行 355: | ||
L0: | L0: | ||
- | |Value|Label| | + | ^Value^Label^ |
|1|High Income, expensive child| | |1|High Income, expensive child| | ||
|2|Very Important Provincials| | |2|Very Important Provincials| | ||
行 362: | 行 470: | ||
tic.eval <- ticdata[5823: | tic.eval <- ticdata[5823: | ||
</ | </ | ||
- | |||
=== 準備 === | === 準備 === | ||
行 757: | 行 864: | ||
* 永田・棟近 (2001) [[http:// | * 永田・棟近 (2001) [[http:// | ||
+ | |||
+ | |||
+ | ==== 練習課題(参考) ==== | ||
+ | |||
+ | 決定木について、理解が難しい人は、この部分の決定木の箇所だけでも実行して考えてみるといい。この箇所は今回の課題ではない。 | ||
+ | |||
+ | === タイタニック号 === | ||
+ | |||
+ | タイタニック号の乗客の生死のデータがある。Rで | ||
+ | < | ||
+ | Titanic | ||
+ | </ | ||
+ | と実行すると、表示される。 | ||
+ | |||
+ | これを個別のレコードに展開し、更に救出の優先順位を高く設定された女性もしくは子供と、低めに設定された成人男性という変数も加える。 | ||
+ | < | ||
+ | data(" | ||
+ | titanic <- as.data.frame(Titanic) | ||
+ | titanic <- titanic[rep(1: | ||
+ | names(titanic)[2] <- " | ||
+ | titanic <- transform(titanic, | ||
+ | Gender == " | ||
+ | levels = c(FALSE, TRUE), | ||
+ | labels = c(" | ||
+ | )) | ||
+ | </ | ||
+ | |||
+ | さらに、数値に変換したデータも用意する。これは、線形学習機械とロジスティック学習機械のために用いる。 | ||
+ | < | ||
+ | titanic.2 <- data.frame(Gender=(titanic$Gender==" | ||
+ | Age=(titanic$Age==" | ||
+ | Survived=(titanic$Survived==" | ||
+ | Class=(titanic$Class==" | ||
+ | </ | ||
+ | |||
+ | |変数|数値化情報| | ||
+ | |性別(Gender)|女性(Female)=1, | ||
+ | |年齢(Age)|子供(Child)=1, | ||
+ | |客室等級(Class)|1等(1st)=4, | ||
+ | |生存(Survived)|生存(Yes)=1, | ||
+ | |||
+ | === 先週の課題と同等の課題 === | ||
+ | |||
+ | 先週の課題は、タイタニック号で、生存率が高くなる条件を求めよ、という問題と同等。 | ||
+ | まず titanic というデータに含まれる変数の一覧を | ||
+ | < | ||
+ | names(titanic) | ||
+ | </ | ||
+ | で取り出す。すると | ||
+ | < | ||
+ | [1] " | ||
+ | </ | ||
+ | のように5個の変数があることが分かる。 | ||
+ | |||
+ | これを用いて、生存(Survived)についての集計を、客室等級(Class)、性別(Gender)、年齢層(Age)の組み合わせで行うには、次の1行を実行する。 | ||
+ | 「$」の前がデータ名、「$」の後ろに変数名(フィールド名)を付ける。 | ||
+ | < | ||
+ | ftable(titanic$Gender, | ||
+ | </ | ||
+ | すると | ||
+ | < | ||
+ | No Yes | ||
+ | | ||
+ | Male Child 1st | ||
+ | | ||
+ | | ||
+ | | ||
+ | Adult 1st | ||
+ | | ||
+ | | ||
+ | | ||
+ | Female Child 1st | ||
+ | | ||
+ | | ||
+ | | ||
+ | Adult 1st 4 140 | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | と出力されるのを、各自確認せよ。 | ||
+ | |||
+ | 同じことは、数値化したデータを用いても得られる。 | ||
+ | < | ||
+ | ftable(titanic.2$Gender, | ||
+ | </ | ||
+ | |||
+ | 上の出力と下の出力を見比べて、各変数の値の数値化を確認せよ。 | ||
+ | < | ||
+ | | ||
+ | | ||
+ | 0 0 1 670 192 | ||
+ | 2 387 75 | ||
+ | 3 154 14 | ||
+ | 4 118 57 | ||
+ | 1 1 0 0 | ||
+ | 2 | ||
+ | 3 0 11 | ||
+ | 4 0 5 | ||
+ | 1 0 1 3 20 | ||
+ | 2 | ||
+ | 3 | ||
+ | 4 4 140 | ||
+ | 1 1 0 0 | ||
+ | 2 | ||
+ | 3 0 13 | ||
+ | 4 0 1 | ||
+ | </ | ||
+ | |||
+ | === 線形学習機械 === | ||
+ | |||
+ | 上のデータ(titanic.2)に対して | ||
+ | < | ||
+ | lm(Survived~., | ||
+ | </ | ||
+ | を実行すると、全変数を用いた線形学習機械が最小二乗法により、学習される。学習結果のみなら、この一行で | ||
+ | < | ||
+ | Call: | ||
+ | lm(formula = Survived ~ ., data = titanic.2) | ||
+ | |||
+ | Coefficients: | ||
+ | (Intercept) | ||
+ | 0.11725 | ||
+ | </ | ||
+ | と出力される。 | ||
+ | |||
+ | この結果に、統計的推測の結果を付与するなら | ||
+ | < | ||
+ | summary(lm(Survived~., | ||
+ | </ | ||
+ | を実行すればよい。summary()の出力は次のように得られる。 | ||
+ | < | ||
+ | Call: | ||
+ | lm(formula = Survived ~ ., data = titanic.2) | ||
+ | |||
+ | Residuals (残差の分布): | ||
+ | Min 1Q Median | ||
+ | -0.7833 -0.2178 -0.1675 | ||
+ | |||
+ | Coefficients (回帰係数): | ||
+ | Estimate Std. Error t value Pr(> | ||
+ | (Intercept) 0.117252 | ||
+ | Gender | ||
+ | Age | ||
+ | Class | ||
+ | --- | ||
+ | Signif. codes (有意水準の表示法): | ||
+ | |||
+ | Residual standard error (残差の標準偏差): | ||
+ | Multiple R-squared (決定係数): | ||
+ | F-statistic (F統計量、分散分析の結果): | ||
+ | </ | ||
+ | |||
+ | == 線形学習機械のチューニング == | ||
+ | |||
+ | AICを用いた説明変数の選択を行うのであれば、 | ||
+ | < | ||
+ | library(MASS) | ||
+ | </ | ||
+ | とMASSパッケージを読み込んでから使える関数stepAIC()を用いて、 | ||
+ | < | ||
+ | stepAIC(lm(Survived~., | ||
+ | </ | ||
+ | を実行する。 | ||
+ | < | ||
+ | Start: | ||
+ | Survived ~ Gender + Age + Class | ||
+ | |||
+ | Df Sum of Sq RSS AIC | ||
+ | < | ||
+ | - Age | ||
+ | - Class | ||
+ | - Gender | ||
+ | |||
+ | Call: | ||
+ | lm(formula = Survived ~ Gender + Age + Class, data = titanic.2) | ||
+ | |||
+ | Coefficients: | ||
+ | (Intercept) | ||
+ | 0.11725 | ||
+ | </ | ||
+ | これはAICを変数増減法で最適化する関数であり、最終的に採用するモデルを出力してくれる便利な関数である。 | ||
+ | |||
+ | == 関係するグラフ == | ||
+ | < | ||
+ | titanic.lm <- lm(Survived~., | ||
+ | par(mfrow=c(2, | ||
+ | plot(titanic.lm) | ||
+ | par(mfrow=c(1, | ||
+ | </ | ||
+ | |||
+ | == 学習結果の解釈 == | ||
+ | |||
+ | 上の回帰分析から | ||
+ | < | ||
+ | Survived = 0.11725 + 0.46493 * Gender + 0.09655 * Age + 0.05029 * Class | ||
+ | </ | ||
+ | という学習結果が得られた。Survivedを大きくする(=生存する)ために、Genderが0よりは1の方が良いことは、回帰係数 0.46493 を見れば分かる。 | ||
+ | 同様に Age も0よりは1の方が良く、Classも1よりは4の方が良い。 | ||
+ | そしてどの変数も有意であることから、生存するためには、 | ||
+ | |||
+ | * 男性よりは女性 | ||
+ | * 大人よりは子供 | ||
+ | * 客室等級は高めの部屋を選ぶ | ||
+ | |||
+ | のが好条件となることが分かる。 | ||
+ | |||
+ | === ロジスティック線形学習機械 === | ||
+ | |||
+ | 生存確率をpとして | ||
+ | < | ||
+ | log(p/1-p) | ||
+ | </ | ||
+ | を与える学習機械が、ロジスティック回帰モデルである。Rではglm()という関数を用いて | ||
+ | < | ||
+ | glm(Survived~., | ||
+ | </ | ||
+ | で、ロジスティック回帰モデルを最尤推定で学習させることができる。 | ||
+ | 結果は | ||
+ | < | ||
+ | Call: glm(formula = Survived ~ ., family = " | ||
+ | |||
+ | Coefficients: | ||
+ | (Intercept) | ||
+ | -1.8622 | ||
+ | |||
+ | Degrees of Freedom: 2200 Total (i.e. Null); | ||
+ | Null Deviance: | ||
+ | Residual Deviance: 2299 AIC: 2307 | ||
+ | </ | ||
+ | と、lm()と似た出力を得る。 | ||
+ | これもsummary()を加えて | ||
+ | < | ||
+ | summary(glm(Survived~., | ||
+ | </ | ||
+ | を実行すると、 | ||
+ | < | ||
+ | Call: | ||
+ | glm(formula = Survived ~ ., family = " | ||
+ | |||
+ | Deviance Residuals: | ||
+ | Min | ||
+ | -1.7597 | ||
+ | |||
+ | Coefficients: | ||
+ | Estimate Std. Error z value Pr(> | ||
+ | (Intercept) -1.86224 | ||
+ | Gender | ||
+ | Age 0.51147 | ||
+ | Class 0.27834 | ||
+ | --- | ||
+ | Signif. codes: | ||
+ | |||
+ | (Dispersion parameter for binomial family taken to be 1) | ||
+ | |||
+ | Null deviance: 2769.5 | ||
+ | Residual deviance: 2299.2 | ||
+ | AIC: 2307.2 | ||
+ | |||
+ | Number of Fisher Scoring iterations: 4 | ||
+ | </ | ||
+ | と、種々の検定統計量が一緒に出力される。 | ||
+ | |||
+ | == ロジスティック学習機械のチューニング == | ||
+ | |||
+ | AICを用いた説明変数の選択を行うのであれば、 | ||
+ | < | ||
+ | library(MASS) | ||
+ | </ | ||
+ | とMASSパッケージを読み込んでから使える関数stepAIC()を用いて、 | ||
+ | < | ||
+ | stepAIC(glm(Survived~., | ||
+ | </ | ||
+ | を実行する。 | ||
+ | < | ||
+ | Start: | ||
+ | Survived ~ Gender + Age + Class | ||
+ | |||
+ | Df Deviance | ||
+ | < | ||
+ | - Age | ||
+ | - Class | ||
+ | - Gender | ||
+ | |||
+ | Call: glm(formula = Survived ~ Gender + Age + Class, family = " | ||
+ | data = titanic.2) | ||
+ | |||
+ | Coefficients: | ||
+ | (Intercept) | ||
+ | -1.8622 | ||
+ | |||
+ | Degrees of Freedom: 2200 Total (i.e. Null); | ||
+ | Null Deviance: | ||
+ | Residual Deviance: 2299 AIC: 2307 | ||
+ | </ | ||
+ | これはAICを変数増減法で最適化する関数であり、最終的に採用するモデルを出力してくれる便利な関数である。 | ||
+ | |||
+ | == 関係するグラフ == | ||
+ | |||
+ | < | ||
+ | titanic.glm <- glm(Survived~., | ||
+ | par(mfrow=c(2, | ||
+ | plot(titanic.glm) | ||
+ | par(mfrow=c(1, | ||
+ | </ | ||
+ | |||
+ | == 学習結果の解釈 == | ||
+ | |||
+ | 上の回帰分析から | ||
+ | < | ||
+ | log(Pr[Survived]/ | ||
+ | </ | ||
+ | という学習結果が得られた。Pr[Survived](生存する確率)を大きくするために、Genderが0よりは1の方が良いことは、回帰係数 2.050802 を見れば分かる。 | ||
+ | 同様に Age も0よりは1の方が良く、Classも1よりは4の方が良い。 | ||
+ | そしてどの変数も有意であることから、生存するためには、 | ||
+ | |||
+ | * 男性よりは女性 | ||
+ | * 大人よりは子供 | ||
+ | * 客室等級は高めの部屋を選ぶ | ||
+ | |||
+ | のが好条件となることが分かる。 | ||
+ | |||
+ | === 決定木 === | ||
+ | |||
+ | 決定木は生存確率pの高低を際立たせるような、データの分割を表現するモデルである。Rではrpartパッケージの中のrpart()、もしくはmvpartパッケージの中のmvpart()という関数を用いて | ||
+ | < | ||
+ | library(mvpart) | ||
+ | rpart(Survived~., | ||
+ | </ | ||
+ | で、決定木を学習させることができる。 | ||
+ | 結果は | ||
+ | < | ||
+ | n= 2201 | ||
+ | |||
+ | node), split, n, loss, yval, (yprob) | ||
+ | * denotes terminal node | ||
+ | |||
+ | 1) root 2201 711 No (0.6769650 0.3230350) | ||
+ | 2) Gender=Male 1731 367 No (0.7879838 0.2120162) | ||
+ | 4) Age=Adult 1667 338 No (0.7972406 0.2027594) * | ||
+ | 5) Age=Child 64 29 No (0.5468750 0.4531250) | ||
+ | 10) Class=3rd 48 13 No (0.7291667 0.2708333) * | ||
+ | 11) Class=1st, | ||
+ | 3) Gender=Female 470 126 Yes (0.2680851 0.7319149) | ||
+ | 6) Class=3rd 196 90 No (0.5408163 0.4591837) * | ||
+ | 7) Class=1st, | ||
+ | </ | ||
+ | と、これまでとは違ったものになる。各行はノードと呼ばれる分割単位を表し、 | ||
+ | たとえば | ||
+ | < | ||
+ | 1) root 2201 711 No (0.6769650 0.3230350) | ||
+ | </ | ||
+ | は、 | ||
+ | * データ全体(root)はレコード数が2201 | ||
+ | * このノードの代表値(一番多い値)はNo | ||
+ | * 2201のうち711はNoでない | ||
+ | * YesとNoの比は0.6769650: | ||
+ | を意味する。これを性別で分割すると | ||
+ | < | ||
+ | 2) Gender=Male 1731 367 No (0.7879838 0.2120162) | ||
+ | 3) Gender=Female 470 126 Yes (0.2680851 0.7319149) | ||
+ | </ | ||
+ | を得た、とある。これは | ||
+ | * データ全体を性別で分割すると、生存確率がもっとも差が開く | ||
+ | * 男性の代表値はNo(死亡)、0.7879838は死亡確率を意味するので、生存確率は0.2120162 | ||
+ | * 女性の代表値はYes(生存)、0.7319149は生存確率 | ||
+ | と読み取ることができる。 | ||
+ | 生存確率の高いノードを探すと | ||
+ | < | ||
+ | 7) Class=1st, | ||
+ | </ | ||
+ | が目に付く。これは、 | ||
+ | - Gender=Female | ||
+ | - Class=1st, | ||
+ | と条件がふたつついたノードであり、「女性かつ1等客室の乗客、2等客室の乗客、または乗組員」となる。 | ||
+ | この属性を持つ人々は、生存確率が0.9270073と最も高い。 | ||
+ | 逆に最も生存確率が低いのは | ||
+ | < | ||
+ | 10) Class=3rd 48 13 No (0.7291667 0.2708333) * | ||
+ | </ | ||
+ | であり、このノードまでを | ||
+ | - Gender=Male | ||
+ | - Age=Adult | ||
+ | - Class=3rd | ||
+ | と辿れることから、「男性で成人で3等客室の乗客」は生存確率が0.2708333と最も低かったことが分かる。 | ||
+ | |||
+ | これもsummary()を加えて | ||
+ | < | ||
+ | summary(rpart(Survived~., | ||
+ | </ | ||
+ | を実行すると、 | ||
+ | < | ||
+ | Call: | ||
+ | rpart(formula = Survived ~ ., data = titanic) | ||
+ | n= 2201 | ||
+ | |||
+ | CP nsplit rel error xerror | ||
+ | 1 0.30661041 | ||
+ | 2 0.02250352 | ||
+ | 3 0.01125176 | ||
+ | 4 0.01000000 | ||
+ | |||
+ | Node number 1: 2201 observations, | ||
+ | predicted class=No | ||
+ | class counts: | ||
+ | | ||
+ | left son=2 (1731 obs) right son=3 (470 obs) | ||
+ | Primary splits: | ||
+ | Gender | ||
+ | Treatment splits as LR, | ||
+ | Class | ||
+ | Age | ||
+ | Surrogate splits: | ||
+ | Treatment splits as LR, agree=0.971, | ||
+ | |||
+ | Node number 2: 1731 observations, | ||
+ | predicted class=No | ||
+ | class counts: | ||
+ | | ||
+ | left son=4 (1667 obs) right son=5 (64 obs) | ||
+ | Primary splits: | ||
+ | Age | ||
+ | Treatment splits as LR, | ||
+ | Class | ||
+ | Surrogate splits: | ||
+ | Treatment splits as LR, agree=1, adj=1, (0 split) | ||
+ | |||
+ | Node number 3: 470 observations, | ||
+ | predicted class=Yes | ||
+ | class counts: | ||
+ | | ||
+ | left son=6 (196 obs) right son=7 (274 obs) | ||
+ | Primary splits: | ||
+ | Class splits as RRLR, improve=50.015320, | ||
+ | Age | ||
+ | Surrogate splits: | ||
+ | Age splits as LR, agree=0.619, | ||
+ | |||
+ | Node number 4: 1667 observations | ||
+ | predicted class=No | ||
+ | class counts: | ||
+ | | ||
+ | |||
+ | Node number 5: 64 observations, | ||
+ | predicted class=No | ||
+ | class counts: | ||
+ | | ||
+ | left son=10 (48 obs) right son=11 (16 obs) | ||
+ | Primary splits: | ||
+ | Class splits as RRL-, improve=12.76042, | ||
+ | |||
+ | Node number 6: 196 observations | ||
+ | predicted class=No | ||
+ | class counts: | ||
+ | | ||
+ | |||
+ | Node number 7: 274 observations | ||
+ | predicted class=Yes | ||
+ | class counts: | ||
+ | | ||
+ | |||
+ | Node number 10: 48 observations | ||
+ | predicted class=No | ||
+ | class counts: | ||
+ | | ||
+ | |||
+ | Node number 11: 16 observations | ||
+ | predicted class=Yes | ||
+ | class counts: | ||
+ | | ||
+ | </ | ||
+ | と、分割の経緯が一緒に出力される。 | ||
+ | == 決定木のチューニング == | ||
+ | |||
+ | 上のsummary()の出力の中に「complexity param」という項目が見られる。 | ||
+ | rpart()では、この値の下限を指定することで、生成する決定木の深さを選択できる。 | ||
+ | |||
+ | 次の3行による学習結果の違いを観察してみよ。 | ||
+ | < | ||
+ | print(rpart(Survived~., | ||
+ | print(rpart(Survived~., | ||
+ | print(rpart(Survived~., | ||
+ | </ | ||
+ | |||
+ | |||
+ | == 関係するグラフ == | ||
+ | < | ||
+ | titanic.rpart <- rpart(Survived~., | ||
+ | plot(titanic.rpart) | ||
+ | text(titanic.rpart) | ||
+ | </ | ||
+ | |||
+ | == 学習結果の解釈 == | ||
+ | |||
+ | 上の決定木の結果から、生存確率が高い条件は | ||
+ | - 1等・2等客室の女性乗客、または女性の乗組員 | ||
+ | - 1等・2等客室の子供乗客 | ||
+ | であり、生存確率が特に低いのは | ||
+ | - 3等客室の男性乗客 | ||
+ | であったことが分かる。 | ||
+ | |||
+ | === 練習課題についての課題 === | ||
+ | |||
+ | * 3つの分析手法を適用せよ。(時間内課題) | ||
+ | * 3つの分析手法の結果をまとめ、比較検討せよ。(レポート課題) | ||
+ | * これら以外に、Rで2値判別を行う手法を探し、適用して、比較に加えてみよ。(課外課題) | ||
=== サポート欄 === | === サポート欄 === | ||
行 789: | 行 1402: | ||
|V84|5777|44|1| | | | | | |V84|5777|44|1| | | | | | ||
- | === 参考 === | + | ==== 参考 |
- | == 少し加工する == | + | === V86も因子変数にしてみると == |
- | 以下の6行は、実行しない方がいい場合もある。 | + | V86まで因子変数に変えると、glm関数の挙動が少し変わるかも。 |
< | < | ||
- | tic.learn$V1 <- as.factor(tic.learn$V1) | + | tic.learn$V86f <- as.factor(tic.learn$V86) |
- | tic.learn$V5 <- as.factor(tic.learn$V5) | + | |
- | tic.learn$V86 <- as.factor(tic.learn$V86) | + | |
- | tic.eval$V1 <- as.factor(tic.eval$V1) | + | |
- | tic.eval$V5 <- as.factor(tic.eval$V5) | + | |
- | tic.eval$V86 <- as.factor(tic.eval$V86) | + | |
</ | </ | ||
- | あとはそのまま。 | + | === 訪問客リストを作成したい場合 === |
== 考えたルールに基づく対象限定 == | == 考えたルールに基づく対象限定 == | ||
行 886: | 行 1493: | ||
で38.275%となる。 | で38.275%となる。 | ||
- | == 想定される困難 == | + | === TICデータでロジスティック回帰を行う場合のメモ === |
+ | == 想定される困難 | ||
次の1行を実行すると、かなり時間がかかってエラーになる。 | 次の1行を実行すると、かなり時間がかかってエラーになる。 | ||
行 933: | 行 1541: | ||
V61+V62+V63+V64, | V61+V62+V63+V64, | ||
</ | </ | ||
+ |