ワインの味(美味しさのグレード)は予測できるか?(2)
それでは実際に分析を行なっていきます。
分析方法
データ分析により、ワインの成分データから味のグレード(属性quality)を求めるモデルを作成します。
グレードqualityは0(とてもまずい)から10(絶品)までの値をとる質的変数(順序尺度)とみなすのが原則ですが、分析の際には量的変数として扱います。
したがって回帰モデルを作成することによりデータを分析すれば良いことになります。用いた手法は、線形回帰モデル(交互作用あり・なし)、サポートベクター回帰(SVR、support vector regression)、ランダムフォレスト(random forest)です*1。
もちろん、グレードqualityを質的変数とみなすことにより、分類問題として分析することも可能です。実際は、あまり予測精度に違いはありませんでしたので結果は省略します。
また、事前につぎの処理をデータに施しておきます。
- 標準化
- 元データを2/3を訓練データに、1/3をテストデータに分割
- 外れ値の除去(LOF(local outlier factor)を用います)
この処理を施した結果、データサイズはつぎのようになりました。
ワイン | 訓練データサイズ | テストデータサイズ |
---|---|---|
赤ワイン | 1062 | 533 |
白ワイン | 3263 | 1633 |
訓練データを用いてモデルを作成し、テストデータを用いて予測精度を評価します(教師あり学習です)。
ところで、モデルの予測結果は実数になるため、これを0から10までの整数に変換する必要があります。この記事ではCortezら(2009)と同様な方法で整数に変換します。
$i$番目のテストデータのquality(正解のグレード)を$y_i$、予測結果(実数)を$\hat{y}_i$とします。このときqualityの予測クラス(整数で、予測グレードのこと)$p_i$はつぎの式で計算します。
$$
p_i =
\begin{cases}
y_i, & \text{if } |y_i - \hat{y}_i| \leqq T \\
\lfloor \hat{y}_i + 0.5 \rfloor, & \text{if } |y_i - \hat{y}_i| > T
\end{cases}
$$
ここで、$\lfloor x \rfloor$は床関数で、上の2番めの式は難しく見えますが、実際は単純な四捨五入のことです。
上の1番目の式に現れる$T$はしきい値で、0.5または1とします。それぞれの意味はつぎのとおりです。
- $T=0.5$のときは予測結果を四捨五入してqualityの予測クラスを求めます。
- $T=1$のときは予測結果と正解データの差が1以下であれば正解とみなします(すなわち評価が甘くなります)。
たとえば、正解が5、予測結果が5.8とすると、$T=0.5$のときは四捨五入して予測クラスは6となります。一方、$T=1$のときは正解と予測結果の差は0.8(<1)なので予測クラスは(6ではなく)5となります。また、予測結果が6.1のばあいは、正解との差は1.1(>1)なので、四捨五入して予測クラスは6となります。
$T=1$とすると評価基準が甘くなります。しかし、もともと味のグレードqualityは、3人以上のワイン査定人による評価結果の中間値を取ったものですので、正解のグレードと予測結果が1だけ異なっても正解とみなして問題ないと考えられます。
線形回帰モデル
まずはシンプルな線形回帰モデルでワインの味qualityを予測します。
まず属性間に多重共線性があるかどうか、VIF(分散拡大要因)を計算しました。
●赤ワイン fixed.acidity volatile.acidity citric.acid residual.sugar chlorides free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol 7.630214 1.790090 3.212295 1.687765 1.490558 2.061621 2.273877 5.993643 3.319835 1.402595 2.820069 ●白ワイン fixed.acidity volatile.acidity citric.acid residual.sugar chlorides free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol 3.260098 1.132510 1.151530 15.216226 1.242013 1.782381 2.323432 38.632377 2.469470 1.171794 11.087115
白ワインのdensity、alcoholのVIFが10を超えているため多重共線性を起こす可能性はありますが、ここでは全属性を用いて回帰モデルを作成します。
つぎに最適な重回帰モデルをステップワイズ法でモデル選択(AICで評価)しました。重回帰モデルの変数ごとの係数はつぎのとおりです。
なお、各変数の係数が本記事の冒頭で書いた式と異なるのは、データを標準化しているためです(冒頭に書いた式はわかりやすさのため標準化していないデータによる式です)。
●赤ワイン Call: lm(formula = .outcome ~ fixed.acidity + volatile.acidity + citric.acid + residual.sugar + chlorides + free.sulfur.dioxide + total.sulfur.dioxide + density + pH + sulphates + alcohol, data = data) Residuals: Min 1Q Median 3Q Max -2.34418 -0.38125 -0.04248 0.47055 2.11543 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 5.617422 0.020111 279.317 < 2e-16 *** fixed.acidity 0.029250 0.054355 0.538 0.5906 volatile.acidity -0.165753 0.027092 -6.118 1.33e-09 *** citric.acid -0.012419 0.035889 -0.346 0.7294 residual.sugar 0.007935 0.026037 0.305 0.7606 chlorides -0.096093 0.023713 -4.052 5.45e-05 *** free.sulfur.dioxide 0.064935 0.028752 2.258 0.0241 * total.sulfur.dioxide -0.143063 0.031568 -4.532 6.52e-06 *** density -0.022065 0.048730 -0.453 0.6508 pH -0.084751 0.036164 -2.344 0.0193 * sulphates 0.159759 0.023963 6.667 4.21e-11 *** alcohol 0.281640 0.033668 8.365 < 2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.6543 on 1050 degrees of freedom Multiple R-squared: 0.3413, Adjusted R-squared: 0.3344 F-statistic: 49.45 on 11 and 1050 DF, p-value: < 2.2e-16 ●白ワイン Call: lm(formula = .outcome ~ fixed.acidity + volatile.acidity + citric.acid + residual.sugar + chlorides + free.sulfur.dioxide + total.sulfur.dioxide + density + pH + sulphates + alcohol, data = data) Residuals: Min 1Q Median 3Q Max -3.4069 -0.5082 -0.0447 0.4634 3.0696 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 5.890e+00 1.322e-02 445.658 < 2e-16 *** fixed.acidity 1.085e-01 2.337e-02 4.642 3.58e-06 *** volatile.acidity -1.924e-01 1.432e-02 -13.433 < 2e-16 *** citric.acid 5.967e-05 1.397e-02 0.004 0.996592 residual.sugar 5.205e-01 5.297e-02 9.825 < 2e-16 *** chlorides -2.557e-03 1.514e-02 -0.169 0.865939 free.sulfur.dioxide 8.593e-02 1.819e-02 4.723 2.42e-06 *** total.sulfur.dioxide -3.577e-03 2.026e-02 -0.177 0.859869 density -6.403e-01 8.385e-02 -7.636 2.93e-14 *** pH 1.324e-01 2.043e-02 6.481 1.05e-10 *** sulphates 7.742e-02 1.457e-02 5.314 1.14e-07 *** alcohol 1.604e-01 4.342e-02 3.694 0.000225 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.7545 on 3251 degrees of freedom Multiple R-squared: 0.2993, Adjusted R-squared: 0.2969 F-statistic: 126.2 on 11 and 3251 DF, p-value: < 2.2e-16
このモデルのもとでテストデータを用いてワインの味qualityを予測しました。予測結果の分割表はつぎのとおりです。なお、pred.halfは$T=0.5$の予測結果、pred.oneは$T=1$の予測結果です。
●赤ワイン pred.half quality 4 5 6 7 3 1 3 1 0 4 0 10 3 0 5 1 162 50 0 6 0 62 151 8 7 0 2 60 14 8 0 0 4 1 pred.one quality 4 5 6 7 3 1 3 1 0 4 1 9 3 0 5 0 207 6 0 6 0 8 213 0 7 0 2 22 52 8 0 0 4 1 ●白ワイン pred.half quality 4 5 6 7 3 1 2 4 1 4 2 28 20 0 5 2 203 293 9 6 0 111 571 65 7 0 10 195 74 8 0 0 27 14 9 0 0 0 1 pred.one quality 4 5 6 7 8 3 1 2 4 1 0 4 14 16 20 0 0 5 0 423 75 9 0 6 0 8 738 1 0 7 0 10 63 206 0 8 0 0 27 12 2 9 0 0 0 1 0
結果をまとめるとつぎの表になります。
- 赤ワイン
しきい値T | 正解率 | 精度(quality:4~7) | 再現率(quality:3~8) |
---|---|---|---|
0.5 | 0.614 | 0.000 0.678 0.561 0.609 | 0.000 0.000 0.761 0.683 0.184 0.000 |
1 | 0.887 | 0.500 0.904 0.855 0.981 | 0.000 0.077 0.972 0.964 0.684 0.000 |
- 白ワイン
しきい値T | 正解率 | 精度(quality:4~7) | 再現率(quality:3~9) |
---|---|---|---|
0.5 | 0.521 | 0.400 0.573 0.514 0.451 | 0.000 0.040 0.400 0.764 0.265 0.000 0.000 |
1 | 0.847 | 0.933 0.922 0.796 0.896 1.000 | 0.000 0.280 0.834 0.988 0.738 0.049 0.000 |
正解率は、約5~6割(しきい値0.5)、約8~9割(しきい値1)です。
また、交互作用を考慮して線形回帰モデルを作成しましたが、予測性能は交互作用なしの場合とほぼ同じ(わずかによい)でしたので結果は省略します。
サポートベクターマシン(サポートベクター回帰)
$\epsilon$サポートベクター回帰で予測します。カーネルはRBF(パラメータは$\gamma$)を用いました。サポートベクターマシンについてはこちらを参照してください。
サポートベクター回帰にはいくつかのパラメータがありますので、最適なパラメータを5分割の交差検証で選択しました。探索したパラメータ空間は、$C \in \{2^{-5}, 2^{-4}, \ldots, 2^{5}\}, \gamma \in \{-15, -13, \ldots,3\}, \epsilon \in \{2^{-5}, 2^{-4}, \ldots, 2^{-1}\}$です。
最適なパラメータはつぎのとおりでした。
$C$ | $\gamma$ | $\epsilon$ | |
---|---|---|---|
赤ワイン | 1 | 0.125 | 0.25 |
白ワイン | 2 | 0.125 | 0.25 |
このモデルのもとでテストデータを用いてワインの味qualityを予測しました。予測結果の分割表はつぎのとおりです。なお、pred.halfは$T=0.5$の予測結果、pred.oneは$T=1$の予測結果です。
●赤ワイン pred.half quality 4 5 6 7 3 1 4 0 0 4 0 11 2 0 5 0 177 36 0 6 0 67 143 11 7 0 3 50 23 8 0 0 5 0 pred.one quality 4 5 6 7 3 1 4 0 0 4 1 10 2 0 5 0 207 6 0 6 0 1 220 0 7 0 3 14 59 8 0 0 5 0 ●白ワイン pred.half quality 4 5 6 7 8 3 0 6 2 0 0 4 8 32 10 0 0 5 5 308 184 10 0 6 2 150 526 69 0 7 0 6 150 122 1 8 0 2 11 27 1 9 0 0 0 1 0 pred.one quality 4 5 6 7 8 3 0 6 2 0 0 4 22 18 10 0 0 5 0 448 49 10 0 6 2 15 726 4 0 7 0 6 48 225 0 8 0 2 11 22 6 9 0 0 0 1 0
結果をまとめるとつぎの表になります。
- 赤ワイン
しきい値T | 正解率 | 精度(quality:4~7) | 再現率(quality:3~8) |
---|---|---|---|
0.5 | 0.644 | 0.000 0.676 0.606 0.676 | 0.000 0.000 0.831 0.647 0.303 0.000 |
1 | 0.914 | 0.500 0.920 0.891 1.000 | 0.000 0.077 0.972 0.995 0.776 0.000 |
- 白ワイン
しきい値T | 正解率 | 精度(quality:4~8) | 再現率(quality:3~9) |
---|---|---|---|
0.5 | 0.591 | 0.533 0.611 0.596 0.533 0.500 | 0.000 0.160 0.607 0.704 0.437 0.024 0.000 |
1 | 0.874 | 0.917 0.905 0.858 0.859 1.000 | 0.000 0.440 0.884 0.972 0.806 0.146 0.000 |
ランダムフォレスト
ランダムフォレスト回帰で予測します。
このモデルのもとでテストデータを用いてワインの味qualityを予測しました。分割表はつぎのとおりです。なお、pred.halfは$T=0.5$の予測結果、pred.oneは$T=1$の予測結果です。
●赤ワイン pred.half quality 4 5 6 7 3 1 4 0 0 4 0 11 2 0 5 2 176 35 0 6 0 54 154 13 7 0 3 38 35 8 0 0 3 2 pred.one quality 4 5 6 7 8 3 1 4 0 0 0 4 2 9 2 0 0 5 0 209 4 0 0 6 0 1 220 0 0 7 0 3 11 62 0 8 0 0 3 1 1 ●白ワイン pred.half quality 4 5 6 7 8 3 0 4 4 0 0 4 3 36 11 0 0 5 0 346 156 5 0 6 0 108 590 49 0 7 0 2 125 152 0 8 0 1 6 26 8 9 0 0 0 1 0 pred.one quality 4 5 6 7 8 3 0 4 4 0 0 4 24 15 11 0 0 5 0 457 45 5 0 6 0 6 740 1 0 7 0 2 27 250 0 8 0 1 6 16 18 9 0 0 0 1 0
結果をまとめるとつぎの表になります。
- 赤ワイン
しきい値T | 正解率 | 精度(quality:4~7) | 再現率(quality:3~8) |
---|---|---|---|
0.5 | 0.685 | 0.000 0.710 0.664 0.700 | 0.000 0.000 0.826 0.697 0.461 0.000 |
1 | 0.927 | 0.667 0.925 0.917 0.984 1.000 | 0.000 0.154 0.981 0.995 0.816 0.200 |
- 白ワイン
しきい値T | 正解率 | 精度(quality:4~8) | 再現率(quality:3~9) |
---|---|---|---|
0.5 | 0.673 | 1.000 0.696 0.661 0.652 1.000 | 0.000 0.060 0.682 0.790 0.545 0.195 0.000 |
1 | 0.912 | 1.000 0.942 0.888 0.916 1.000 | 0.000 0.480 0.901 0.991 0.896 0.439 0.000 |
正解率は、約7割(しきい値0.5)、約9割(しきい値1)で、線形回帰モデルやサポートベクターマシンより予測結果が良いことが分かります。
予測結果と正解の散布図(ジッターあり)を示します。
ランダムフォレストでは変数ごとの重要度を計算することができます。Cortezら(2009)の結果と異なるのですが、データを標準化したためと重要度の計算手法が異なるためと思われます。
参考文献
Bache, K. & Lichman, M. (2013). UCI Machine Learning Repository. Irvine, CA: University of California, School of Information and Computer Science.
P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis.
Modeling wine preferences by data mining from physicochemical properties.
In Decision Support Systems, Elsevier, 47(4):547-553. ISSN: 0167-9236.
*1:Cortezら(2009)が採用した手法は、線形回帰モデル、サポートベクター回帰、ニューラルネットワークです