コーヒーの味を散布図にする、を10年ぶりにやり直した ― 主成分分析からランダムフォレスト、ニューラルネットまで(2026年10月リブート版)

前回の記事「コーヒーの味を散文図にする」を書いたのは、2016年3月4日。気づけば10年と7か月が過ぎていました。(タイトルの「散文図」は「散布図」の変換ミスです。10年間、気づかないふりをしていました。)

前回は、コーヒー豆専門店の商品ページにある「甘味・酸味・苦味・コク」の4つの数字を、主成分分析(PCA)で2つにまとめて散布図にしました。結論は、横軸が「味の全体量」、縦軸は「何でしょうコレ?」と、縦軸の意味を説明しきれずに終わっています。

この10年で、機械学習はずいぶん身近になりました。そこで今回の宿題はこの2つです。

  • 10年前と同じ主成分分析をやり直したら、同じ地図が描けるのか。縦軸の正体は分かるのか
  • ランダムフォレストやニューラルネットワークは、主成分分析では見えなかったものを見せてくれるのか
コーヒーカップとコーヒー豆のキャラクターの周りに散布図の点が浮かぶイラスト。主成分分析、ランダムフォレスト、ニューラルネットの3手法を並べている

1. 今回使う3つの道具

まず、今回の登場人物(手法)を紹介します。

機械学習手法の使い分け。主成分分析は味の地図を描く、ランダムフォレストは産地を当てて何が効いたかも分かる、ニューラルネットは小さなデータでは苦戦する。結論はデータの量が大事
【図1】3つの手法の使い分け(NotebookLMで作成)
  • 主成分分析(PCA):たくさんの数字を、情報をなるべく残したまま2つ程度の軸にまとめます。「味の地図」を描く道具です
  • ランダムフォレスト:少しずつ違う決定木(「酸味が3以上か?」のような質問の枝分かれ)を数百本作り、多数決で答えを出します。どの項目が予測に効いたか(変数重要度)も分かります
  • ニューラルネットワーク:脳の神経回路をまねた、多層の計算式です。今回は、層が2つの小さなもの(MLP)と、データを2つの数字に圧縮して復元する「オートエンコーダ」を使いました。データが多いほど強い、というのが通説です

「AI」と聞くとニューラルネットワークを思い浮かべがちですが、ここでは3つとも機械学習の手法として並べて、同じ土俵で比べます。

2. 使うデータ:ネットを広く探してみた

前回は、1つの店のデータだけで分析しました。今回は、NotebookLMのDeep Researchに「コーヒーの味を数値化した公開データ」と「その機械学習分析」を探してもらい、33件のソースを集めました。見つかったのは、たとえば次のようなものです。

  • Coffee Quality Institute(CQI)のカッピング評価データ(GitHubとKaggleで公開)
  • Kaggleの「Coffee Reviews Dataset」(コーヒーレビューの評価)
  • CQIの2023年5月版(Kaggleで公開。今回は使っていません)

(小ネタです。調査で「SCA」と書いたところ、NotebookLMが「Supply Chain Analytics」の教科書を要約してきて、コーヒーの話が一行も出てこないレポートが完成しました。SCAはSpecialty Coffee Associationのつもりだったのですが。このレポートは使っていません。)

その中から、自由に取得でき、再現できる2つを選びました。

項目 データA:ワールドビーンズショップ データB:CQIカッピング評価
何のデータか 焙煎豆店の商品ページにある「味覚レベル」(★1〜5) 専門家がカップテスト(カッピング)でつけた点数
件数 187商品(2026年10月に取得) アラビカ種1,310ロット(2012〜2017年収穫が中心)
味の項目 甘み・酸味・苦味・コク(前回と同じ4つ) アロマ・フレーバー・後味・酸・ボディ・バランスなど(各10点満点、合計が総合点)
点数の意味 その味が強いか弱いか その味が良いか悪いか
そのほかの情報 原産国、品種、精製方法、標高、おすすめ焙煎度 原産国、品種、精製方法、標高、収穫年
出どころ ワールドビーンズショップ(前回と同じ店) GitHub公開のCQIデータ

データAは、商品ページを1.2秒おきに1枚ずつ取得し(212ページ。robots.txtは問題なし)、味の4項目がそろう単品187商品を使いました。ミックスやお試しセット3点は、味の項目に「0」が入っていたため除外しています。データそのものの再配布はしません。

この2つは、同じ「味のデータ」でも意味が違うことに注意してください。データAは「どんな味か(強さ)」、データBは「どれだけ良いか(質)」の点数です。この違いが、あとで効いてきます。

3. 分析1:前回の地図を描き直す(データA、主成分分析)

まず、前回と同じことをします。4つの味(各項目を標準化)を主成分分析にかけて、2次元の散布図にしました。

コーヒー豆187商品を主成分分析で2次元にした散布図。ブラジルは左、ケニアとルワンダは右、インドネシアは上、パナマは下に位置する。
【図2】コーヒー豆187商品の「味の地図」(◇は産地ごとの平均位置)
主成分の寄与率(PC1が45.1%、PC2が26.2%)と、各軸への4つの味の負荷量を示す棒グラフ
【図3】主成分の寄与率(左)と、各軸に4つの味がどう効いているか(右)
  • 第1主成分(横軸、寄与率45.1%):4項目がすべてプラスです(甘み+0.45、酸味+0.49、苦味+0.43、コク+0.61)。つまり「味の全体量」。前回の読みは当たっていました
  • 第2主成分(縦軸、寄与率26.2%):苦味が+0.70、甘みが-0.59と、反対向きに効いています。縦軸の正体は「苦味系 ↔ 甘み系」でした。前回は「あっさり系と濃い系?」と迷いましたが、これならスッキリ説明できます
  • 2軸で合計71.3%を説明できます

産地ごとの平均位置も見てみます。

  • ブラジル(26商品):最も左(横軸-1.03)。味がおとなしい。前回「左はブラジル・コロンビア産」と書いたとおりです
  • ケニア(5商品)・ルワンダ(5商品):右端(+1.23、+1.15)。味が濃く個性的
  • インドネシア(19商品、マンデリンなど):縦軸の上(+1.36)。苦味系の代表
  • パナマ(6商品):縦軸の下(-0.98)。甘み系
  • エチオピア(20商品)は、前回の予想「右の個性的な側」とは違い、中央やや左(-0.36)でした。甘み3.5、酸味3.1と高めなのに、苦味2.1、コク2.8が低めだからです。10年前は「右にエチオピア産」と書いていたので、これは外れです

地図に点がこれだけ重なる

図2を見ると、同じ位置に点が団子のように重なっています。実は、187商品のうち、4項目の組み合わせは52通りしかありません。星が5段階では、どうしても同じ並びが多くなります。たとえば「甘み4・酸味3・苦味2・コク4」の商品は7つもあります。

商品名(ワールドビーンズショップ、2026年10月時点) 原産国 甘み 酸味 苦味 コク
ブラジル トミオ・フクダ DRY ON TREE ブラジル 4 3 2 4
タンザニア エーデルワイス AA タンザニア 4 3 2 4
グァテマラ アンティグア ピーベリー グァテマラ 4 3 2 4
グァテマラ フロレンシア農園 ゲイシャ グァテマラ 4 3 2 4
コスタリカ アグリビッド オレンジティピカ ハニー コスタリカ 4 3 2 4
コロンビア サンタ・バーバラ Vino7 コロンビア 4 3 2 4
ベトナム ファインロブ ランビアン アナエロビック ナチュラル ベトナム 4 3 2 4

ブラジル、タンザニア、グァテマラ、コスタリカ、コロンビア、ベトナム。産地も豆の品種も精製方法もバラバラなのに、地図の上では完全に同じ点です。前回の最後に書いた「グァテマラが美味しかったから、傾向が似ているタンザニアAAを注文しよう」という使い方は、この表のとおり、実際にできます。ただし、お店の星は5段階なので、地図の解像度はこのくらいが限界です。

4. 分析2:プロのカッピング1,310ロットで同じことをやってみる(データB)

次に、データB(CQI)でも主成分分析をしてみます。アロマ・フレーバー・後味・酸・ボディ・バランスの6項目です。

CQIカッピング評価1310ロットの主成分分析。第1主成分の寄与率が73.9%で、ほかは8%以下。右の散布図はウォッシュドとナチュラルが混ざっている
【図4】CQIカッピング評価の主成分分析:寄与率(左)と、精製方法で色分けした地図(右)

結果は、データAとはまるで違います。

  • 第1主成分だけで73.9%(データAは45.1%)。6項目がすべて同じ向きにプラスで、意味は「総合的な良さ」です。味の特徴ではなく、良いコーヒーは何を評価しても良い、という点数のつき方が表れています
  • 第2主成分以降は、7.9%、6.3%と小さく、図4の右のように、精製方法(ウォッシュド/ナチュラル)で色を分けても混ざったままです
  • 各ロットの平均点を引いて「良さ」を取り除き、味のバランス(個性)だけにして主成分分析をやり直すと、寄与率は27.7%、23.6%、22.6%と3つが並びます。1つの軸には絞れませんでした
  • k-means(自動で似た者同士をグループ分けする手法)も試しました。シルエット係数(グループ分けのきれいさ。大きいほど良い)は、2グループで0.36が最大、3グループで0.30、4グループで0.25と、増やすほど下がります。味の自然なグループは見つかりませんでした

プロの点数は、同じ「味のデータ」でも、味の「強さ」を測るデータAとは別物でした。散布図にしても「良い-普通-やや悪い」が1本の線に並ぶだけで、前回のような「甘み系/苦味系」の分かれ方は見えません。

5. 分析3:ランダムフォレストとニューラルネットに「当てさせる」

主成分分析は「地図を描く」手法でした。ここからは、機械学習の本領である予測です。4つの課題を、次の3つの手法で解かせてみました。

  • ロジスティック回帰(昔ながらの統計手法。④は同じ立場のリッジ回帰)
  • ランダムフォレスト(木500本)
  • ニューラルネット(隠れ層32と16のMLP)

データを5分割して、4つで学習して1つで答え合わせをする(交差検証)作業を5回繰り返した平均です。カンニングを防ぐため、答え合わせ用のデータは学習に使っていません。

4つの課題で、最頻値、ロジスティック回帰、ランダムフォレスト、ニューラルネットの正解率などを比べる棒グラフ。産地当てはどれも約50%や約43%、背景から総合点を予測するとニューラルネットはR2がマイナス0.77
【図5】4つの課題での手法比較(誤差線は標準偏差)
課題 基準(当てずっぽう) ロジスティック回帰(④はリッジ回帰) ランダムフォレスト ニューラルネット
①味4項目→産地(データA、5か国102商品)正解率 25.5% 50.3% 53.2% 52.7%
②カッピング6項目→産地(データB、6か国880ロット)正解率 26.8% 43.2% 42.2% 38.0%
③カッピング6項目→精製方法(データB、ウォッシュド対ナチュラル)平均正解率 50.0% 50.6% 53.1% 55.5%
④産地・品種・精製方法・標高・収穫年→総合点(データB、1,310ロット)決定係数R² 0(平均を答える) +0.14 +0.19 -0.77

① 味の4つの数字から産地を当てる(データA)

当てずっぽうだと25.5%のところ、どの手法でも5割強まで上がりました。ブラジルは「おとなしい」、インドネシアは「苦味系」と、産地には味の傾向があるのです。ただし3手法の差は3ポイントほどで、答え合わせの分け方によるぶれ(標準偏差で8〜9ポイント)よりずっと小さく、優劣はつきません。ランダムフォレストの変数重要度は、酸味0.31、苦味0.30、コク0.23、甘み0.16で、酸味と苦味が産地の手がかりでした。

② カッピングの6項目から産地を当てる(データB)

当てずっぽう26.8%に対して、4割強。ここでは、ニューラルネットが一番低い38.0%でした。

③ カッピングの点から精製方法を当てる(データB)

ウォッシュドとナチュラルを当てる課題です。2群のバランスをとった正解率は、当てずっぽうの50%に対して50.6〜55.5%。ほぼ当たりませんでした。プロの点数は「どれだけ良いか」の採点なので、精製方法の「らしさ」は点数に出ない、あるいは審査の過程で消えていると考えられます(推測です)。

④ 産地や標高などの「素性」から総合点を当てる(データB)

産地、品種、精製方法、標高、収穫年だけを手がかりに、総合点を予測しました。

ランダムフォレストの変数重要度(産地0.33、標高0.28、収穫年0.17、品種0.16、精製方法0.07)と、実際の総合点と予測の散布図(決定係数0.19)
【図6】総合点の予測に効いた項目(左)と、予測と実際のズレ(右)
  • ランダムフォレストでも、R²は0.19。総合点のばらつきの2割弱しか説明できません。右のグラフで、予測が80〜84点あたりに集まっているのは、良いコーヒーも悪いコーヒーも「だいたい真ん中」と答えているからです
  • ニューラルネットは、R²が-0.77。つまり、平均を答えるだけの「0」より悪い結果です。素性の組み合わせが多い(産地や品種の種類が多い)割にデータが1,310件と少なく、学習用のデータを丸暗記して、答え合わせでは外した(過学習)と考えられます。細かく調整すれば改善できそうですが、同じ条件で並べた比較としては、ここがニューラルネットの苦手な領域でした
  • ランダムフォレストの変数重要度は、産地(0.33)、標高(0.28)、収穫年(0.17)、品種(0.16)、精製方法(0.07)の順。「どこで採れたか」と標高が効き、精製方法はほとんど効きません。ただし、標高のように連続した数字は、重要度が高く出やすい癖があります。割り引いて見てください

6. 分析4:ニューラルネットで「味の地図」を描くと?

ニューラルネットの見せ場は、本来「予測」より、非線形な関係を学習できる点です。そこで、主成分分析の「地図を描く」役を、ニューラルネットにやらせてみました。6項目を、途中で2つの数字に絞って元に戻す「オートエンコーダ」です。もう一つ、地図づくりの定番t-SNEも並べます。

CQIカッピング評価1310ロットを、主成分分析、オートエンコーダ、t-SNEの3つの方法で2次元にした散布図。総合点が高いほど濃い青で表示
【図7】3つの方法で描いた「味の地図」(色は総合点)
  • 元の6項目をどれだけ忠実に復元できるか(再構成誤差。小さいほど良い)は、主成分分析が0.182、オートエンコーダが0.190。ほぼ同じで、主成分分析のほうがわずかに良い結果でした
  • 2次元の位置から産地を当てる正解率(近くの点を参考にするk近傍法)は、主成分分析35.0%、オートエンコーダ32.1%、t-SNE34.6%。当てずっぽうの26.8%よりは高いものの、手法による差はありません
  • t-SNEは、総合点の高いロットが右上にまとまって見えます。ただし、t-SNEは点どうしの距離に意味がないので、図の形を読みすぎないほうがよい手法です

データの変動の74%が「良さ」の1本の軸に集まっているので、わざわざ曲がった軸を学習する必要がなく、直線の主成分分析で十分だったということだと思います。

7. まとめ:10年後に分かったこと、そして自省

  • 主成分分析は、10年たっても現役でした。前回の「横軸は味の全体量」は当たり、分からなかった縦軸の正体は「苦味系 ↔ 甘み系」と分かりました。一方、「右の個性的な側にエチオピア産」という推測は外れました
  • ランダムフォレストの強みは、精度より説明です。産地当てでは、ロジスティック回帰と誤差の範囲で同じ。それでも、どの味(酸味と苦味)や、どの素性(産地と標高)が効いたのかを教えてくれます
  • ニューラルネットは、今回は出番がありませんでした。187件や1,310件の表データでは、予測でも地図づくりでも、ほかの手法に並ぶか、負けています。「AI=ニューラルネット」というイメージで、何でも任せればよいわけではなさそうです。データが数十万件になれば結果が変わる可能性はありますが、今回はそこまで確かめていません
  • 手法より、データの中身が結果を決めていました。星5段階の4項目では、地図上の点が52通りしかなく、同じ点に7商品が重なります。プロのカッピング点は、味の強さではなく「良さ」を測ったもので、地図は1本の線になりました。AIで何を使うか選ぶ前に、「そのデータは何を測っているか」を考えるほうが先だと思い知らされました

反省と注意点

  • データAの精製方法は、お店の表記(「ナチュラル」「ウォッシュド」「水洗式」など)を機械的に二つに分けたので、粗い分類です(今回の主な結論には使っていません)
  • データBは2018年ごろに公開された、2012〜2017年収穫が中心のロットです。2023年5月版(Kaggle)は、今回は使っていません。最新の評価データで確かめ直すのは、宿題にします
  • 調査で見つかった関連研究のうち、MDPIの論文「Predicting Coffee Sensory Quality Using Machine Learning and Synthetic Terroir-Based Data」は、原典のページを開けず、数字を確認できませんでした。そのため、数値は引用していません

この先:コーヒーの採点方法が変わった

最後に、データの世界の変化です。SCA(スペシャルティコーヒー協会)は2024年11月、新しい評価方式「Coffee Value Assessment(CVA)」を正式採用しました。2004年から使われてきた従来のカッピングフォームを置き換えるもので、「何が感じられるか(記述的評価)」と「好ましいか(情動的評価)」を別々に採点する考え方です。

今回のデータBの「良さ」の点数は、旧方式のものです。今後は、味の記述と評価が別々に記録されたデータが増えていくと考えられます。そうなれば、今回の主成分分析で見えなかった「味の個性の地図」が、プロのデータでも描けるようになるかもしれません。次に挑戦するなら、テイスティングコメントの文章をAIで数値にして、地図に乗せる方法です。10年後にまた、やり直してみたいと思います。

参考・出典

※分析はPythonのscikit-learn(PCA、k-means、ロジスティック回帰、ランダムフォレスト、MLP)で行い、データAは4項目を標準化してから主成分分析にかけました。データBは総合点が0の異常値1件を除いた1,310ロット(産地の課題は上位6か国の880ロット、精製方法の課題はウォッシュドとナチュラルの1,063ロット)。精度はすべて交差検証の平均で、乱数は固定してあります。図1とアイキャッチはNotebookLMで生成し、グラフ(図2〜7)は実データから作成しました。