verum ipsum factum

sudillap's blog

ワインの味(美味しさのグレード)は予測できるか?(1)

データ分析の威力を色々な実例を挙げて述べた「その数学が戦略を決める」(イアン・エアーズ著)を読まれた方も多いと思います*1

その中に、ワイン好きの経済学者オーリー・アッシェンフェルター(Orley Ashenfelter, プリンストン大学)がワインの質を計算する式

ワインの質 = 12.145+0.00117 × 冬の降雨+0.0614 × 育成期平均気温
      -0.00386 × 収穫期降雨

により、伝統的なワイン批評家たちに「このやり方自体バカげていてまともには受け取れない」とまで言われたことが書かれています。

この式はワインの値段を予測する式ですが、ではワインの味を式で表すことは可能なのでしょうか?

実は可能で、ワインに含まれている成分(化学物質)の濃度などが分かれば、ワインの味(専門家が付けたグレード)を式で表すことができます。それが次の式です。
ちなみに、ワインの味(グレード)は、0(とてもまずい)から10(絶品)まであります。

  • 赤ワイン

ワインの味(グレード)=0.026×(酒石酸濃度)-0.96×(酢酸濃度)
      -0.10×(クエン酸濃度)+0.014×(残留糖分濃度)
      -2.3×(塩化ナトリウム濃度)+0.0054×(遊離亜硫酸濃度)
      -0.0041×(総亜硫酸濃度)-17×(密度)-0.50×(pH)
      +0.91×(硫酸カリウム濃度)+0.26×(アルコール度数)+22

  • 白ワイン

ワインの味(グレード)=0.13×(酒石酸濃度)-1.9×(酢酸濃度)
      -0.0050×(クエン酸濃度)+0.10×(残留糖分濃度)
      -0.12×(塩化ナトリウム濃度)+0.0048×(遊離亜硫酸濃度)
      +0.000076×(総亜硫酸濃度)-210×(密度)+0.86×(pH)
      +0.68×(硫酸カリウム濃度)+0.14×(アルコール度数)+209

ワインの成分さえ分かれば、ワイン専門家による評価の代わりに、この式を使ってワインの味を数値的に求めることができます。実際、この式の予測精度は約5~6割です。後述しますがより高度な手法を使えば精度は約7割となります(グレードをピタリと予測するのではなくグレード±1までなら正解とすれば正解率は約9割になります)。

さらには、この式を使えばどの成分を増やせばまたは減らせばワインをより美味しくできるかがわかります。
実際、これらの成分の中にはワインの製造過程でコントロールできるものがあります。たとえば、収穫前のぶどうの糖度をモニターすることによりワインのアルコール度数を高くしたり低くしたりできますし、残留糖分は、イースト菌(酵母菌)による糖の発酵を一時的に止めることで増やすことができます。


それでは、次からワインの成分から味(グレード)を予測するデータ分析の方法について述べます。

ワインのデータについて

データはUCI Machine Learning Repository(Wine Quality Data Set)から入手できます。

このデータは、ポルトガルワインの一種である、西北端の大西洋に面するミーニョ(Minho)地方で作られたヴィーニョ・ヴェルデ(Vinho Verde)を測定したデータから構成されています。

データセットは赤ワインと白ワインの2種類のデータ群から構成されており、ワイン(銘柄名は不明)ごとに測定された11種類の成分データとそのワインの味を評価したグレード(数値)からなっています。なお、グレードは3人以上のワイン査定士が評価した結果の中間値です(グレードは0(とてもまずい)から10(絶品)まで)(詳細はCortezら(2009)を参照してください)。
データサイズはそれぞれ1599、4898です。変数一覧はつぎのとおりです。

属性(単位) 英語表記
ワインの味(グレード) quality; from 0 (very bad) to 10 (excellent)
酒石酸濃度($g/dm^3$) fixed acidity ($g$(tartaric acid)/$dm^3$)
酢酸濃度($g/dm^3$) volatile acidity ($g$(acetic acid)/$dm^3$)
クエン酸濃度($g/dm^3$) citric acid ($g/dm^3$)
残留糖分濃度($g/dm^3$) residual sugar ($g/dm^3$)
塩化ナトリウム濃度($g/dm^3$) chlorides ($g$(sodium chloride)/$dm^3$)
遊離亜硫酸濃度($mg/dm^3$) free sulfur dioxide ($mg/dm^3$)
総亜硫酸濃度($mg/dm^3$) total sulfur dioxide ($mg/dm^3$)
密度($g/dm^3$) density ($g/dm^3$)
pH pH
硫酸カリウム濃度($g/dm^3$) sulphates ($g$(potassium sulphate)/$dm^3$)
アルコール度数(% vol.) alcohol (% vol.)

今後は、基本的に英語表記の属性名を用います。

各種記述統計量は次のとおりです。

  • 赤ワイン
                     nobs NAs Minimum   Maximum 1. Quartile 3. Quartile      Mean   Median       Sum  SE Mean  LCL Mean  UCL Mean    Variance     Stdev Skewness  Kurtosis
fixed.acidity        1599   0 4.60000  15.90000      7.1000    9.200000  8.319637  7.90000 13303.100 0.043541  8.234234  8.405041    3.031416  1.741096 0.980908  1.119699
volatile.acidity     1599   0 0.12000   1.58000      0.3900    0.640000  0.527821  0.52000   843.985 0.004478  0.519037  0.536604    0.032062  0.179060 0.670333  1.212689
citric.acid          1599   0 0.00000   1.00000      0.0900    0.420000  0.270976  0.26000   433.290 0.004872  0.261420  0.280531    0.037947  0.194801 0.317740 -0.793046
residual.sugar       1599   0 0.90000  15.50000      1.9000    2.600000  2.538806  2.20000  4059.550 0.035259  2.469646  2.607965    1.987897  1.409928 4.532140 28.485020
chlorides            1599   0 0.01200   0.61100      0.0700    0.090000  0.087467  0.07900   139.859 0.001177  0.085158  0.089775    0.002215  0.047065 5.669694 41.525963
free.sulfur.dioxide  1599   0 1.00000  72.00000      7.0000   21.000000 15.874922 14.00000 25384.000 0.261586 15.361835 16.388009  109.414884 10.460157 1.248222  2.007221
total.sulfur.dioxide 1599   0 6.00000 289.00000     22.0000   62.000000 46.467792 38.00000 74302.000 0.822640 44.854225 48.081360 1082.102373 32.895324 1.512689  3.785676
density              1599   0 0.99007   1.00369      0.9956    0.997835  0.996747  0.99675  1593.798 0.000047  0.996654  0.996839    0.000004  0.001887 0.071154  0.922500
pH                   1599   0 2.74000   4.01000      3.2100    3.400000  3.311113  3.31000  5294.470 0.003861  3.303540  3.318686    0.023835  0.154386 0.193320  0.795919
sulphates            1599   0 0.33000   2.00000      0.5500    0.730000  0.658149  0.62000  1052.380 0.004239  0.649834  0.666463    0.028733  0.169507 2.424118 11.661529
alcohol              1599   0 8.40000  14.90000      9.5000   11.100000 10.422983 10.20000 16666.350 0.026650 10.370710 10.475256    1.135647  1.065668 0.859214  0.191659
quality              1599   0 3.00000   8.00000      5.0000    6.000000  5.636023  6.00000  9012.000 0.020196  5.596410  5.675635    0.652168  0.807569 0.217393  0.287915
  • 白ワイン
                     nobs NAs Minimum   Maximum 1. Quartile 3. Quartile       Mean    Median        Sum  SE Mean   LCL Mean   UCL Mean    Variance     Stdev Skewness  Kurtosis
fixed.acidity        4898   0 3.80000  14.20000    6.300000      7.3000   6.854788   6.80000  33574.750 0.012058   6.831149   6.878426    0.712114  0.843868 0.647355  2.166627
volatile.acidity     4898   0 0.08000   1.10000    0.210000      0.3200   0.278241   0.26000   1362.825 0.001440   0.275418   0.281065    0.010160  0.100795 1.576014  5.081904
citric.acid          4898   0 0.00000   1.66000    0.270000      0.3900   0.334192   0.32000   1636.870 0.001729   0.330801   0.337582    0.014646  0.121020 1.281135  6.163631
residual.sugar       4898   0 0.60000  65.80000    1.700000      9.9000   6.391415   5.20000  31305.150 0.072473   6.249336   6.533494   25.725770  5.072058 1.076434  3.462415
chlorides            4898   0 0.00900   0.34600    0.036000      0.0500   0.045772   0.04300    224.193 0.000312   0.045160   0.046384    0.000477  0.021848 5.020254 37.508493
free.sulfur.dioxide  4898   0 2.00000 289.00000   23.000000     46.0000  35.308085  34.00000 172939.000 0.243009  34.831679  35.784491  289.242720 17.007137 1.405883 11.447515
total.sulfur.dioxide 4898   0 9.00000 440.00000  108.000000    167.0000 138.360657 134.00000 677690.500 0.607239 137.170196 139.551119 1806.085491 42.498065 0.390471  0.568587
density              4898   0 0.98711   1.03898    0.991723      0.9961   0.994027   0.99374   4868.746 0.000043   0.993944   0.994111    0.000009  0.002991 0.977174  9.777368
pH                   4898   0 2.72000   3.82000    3.090000      3.2800   3.188267   3.18000  15616.130 0.002158   3.184037   3.192496    0.022801  0.151001 0.457502  0.527568
sulphates            4898   0 0.22000   1.08000    0.410000      0.5500   0.489847   0.47000   2399.270 0.001631   0.486650   0.493044    0.013025  0.114126 0.976595  1.586208
alcohol              4898   0 8.00000  14.20000    9.500000     11.4000  10.514267  10.40000  51498.880 0.017584  10.479795  10.548739    1.514427  1.230621 0.487044 -0.699877
quality              4898   0 3.00000   9.00000    5.000000      6.0000   5.877909   6.00000  28790.000 0.012655   5.853101   5.902718    0.784356  0.885639 0.155701  0.213767

属性ごとの箱ひげ図は次のとおりです。

  • 赤ワイン

f:id:sudillap:20130425234216p:plain

  • 白ワイン

f:id:sudillap:20130425234029p:plain

ワインの味(グレードquality)のヒストグラムはつぎのとおりです。グレードは0から10までの値を取ることができますが、このワインデータに含まれているサンプルには、3~8(赤ワイン)、3~9(白ワイン)のデータしかないことがわかります。
f:id:sudillap:20130427003253p:plainf:id:sudillap:20130427003258p:plain

それでは実際に分析を行なっていきます*2

*1:訳書では「super crunchers」を「絶対計算者」と訳していますが訳語に非常に違和感を感じます。本書で取り上げられている人達は統計的・確率的手法で分析しているため「絶対」とは真逆だと思うからです。今流行のデータサイエンティストと訳したほうがいいのではないかと思います。

*2:当初、属性residual.sugar, chlorides, free.sulfur.dioxide, total.sulfur.dioxide, sulphatesについてはlog変換した属性を用いたのですが、変換前よりわずかに精度が良くなるだけでしたのでlog変換しないときの結果のみを示します