23年4月28日に渋谷weworkにて紅茶のブレンド最適化を計算で行いました。みなさん興味があるとのことで、開催報告レポートをしたいと思います。
こちらの技術は、基本的には配合が関わることはなんでも計算ができます。紅茶、コーヒー、料理、ドレッシング、調味料、コンクリート、化粧品など。また、ファッション、広告、パッケージデザイン、ウェブサイトデザイン。などにも応用できます。
今回はこの中でも前者の製品開発に利用できる方で、紅茶のブレンドを行いました。コーヒーの予定でしたが、紅茶の方が簡単だということで、紅茶に。
当日急遽手に入ったティーバッグは、
1、レモンジンジャー
2、ローズヒップ&ハイビスカス
3、アッサム
4、ペパーミント&スペアミント
5、カモミール
6、ダージリン
7、アールグレイ
でした。これらを配合することで新しい美味しい味を見つけ出そうというのが今回の目的です。
そもそも前提として考え方は、味にも関数があり、その関数に従って組合せ最適化ができるという考えのもとで開発をしています。最適化問題は最大もしくは最小の値を探す問題で、味についても最小値を探すことが大事で、途中に局所解というそこそこ美味しいという罠がたくさん潜んでいます。そうしたそこそこ美味しい局所解をたどりながらより美味しい味を探索します。
今回は僕はよく知りませんがダージリンやアールグレイはアッサムなどと味が似ているということで除外しました。ここで組合せの元となる原材料の数が多いと組合せ爆発と呼ばれる解が膨大に増えてしまいます。なるべく類似の配合は避けながら探索をします。
1、レモンジンジャー
2、ローズヒップ&ハイビスカス
3、アッサム
4、ペパーミント&スペアミント
5、カモミール
最終的に上記の五種類を混ぜることにしました。
次に問題となるのが、配合の割合です。配合量は連続値といって増減はいくらでも調整できてしまいます。今回は実際にお茶を混ぜて飲みますが、限られた回数の中で効率的に探索をしたいと考えます。
そこで、組合せ最適化問題なので、離散値といって配合量に一定の単位を導入します。サイコロの目が1の時にはスプーン1杯。2の時には2杯。3か4の時には0杯。5か6の時には3杯としました。
そして、配合の種類を全部で5種類とし、最終的にみんなで5種類のブレンドティーを飲むことに。なので、一回にサイコロを5個振り、それを5回繰り返して配合を決めました。最初の配合は過去のデータの傾向から取ることもあれば完全にランダムからスタートして大丈夫なので、今回はランダムスタートを選びました。ちなみに適当なサイコロアプリでサイコロを五個振りました。
そして決まったのは、
のようになりました。合計のスプーンの杯数は、7,5,9,9,7杯とバラバラでしたが、実際には正規化・規格化と言って全体で割ることで合計の量を統一し、割合を調整できます。
このように実際に作る時にはオペレーション的なことや取りうる材料の配合割合など作りやすい単位で作る必要があります。今回は上の表でスプーンの杯数を決めてそれで作りました。
実際に配合し、それにお湯を足しました。最終的にそれぞれのコップにスプーンでお茶をすくって飲み比べをしました。
飲み比べをしますが、ここからは主観が入ります。今回は年齢層も性別も違う人たちが集まりました。その平均をとりますので、平均的な値になります。
点数は、
5:絶品。製品化したい。
4:とりあえずうまい。
3:まぁ普通
2:まずいです
1:飲めたもんじゃない
でつけてもらいます。完全に主観で大丈夫です。当日の体調などもあると思いますが、これでやります。結果は、、、
こうなりました。一番人気はレシピ1です。
アッサム+ペパーミント+カモミール
次は同率2位でレシピ2と5でした。レシピ1は全体的に評価が高い一方で、レシピ2は評価がちょっと低い中で好きな人がいます。レシピ五は大きく二つに評価が割れました。このように主観の評価では味の評価は大きく割れる場合が多いです。
飲む人の属性を揃えたりターゲットを絞ることでこの評価の傾向は変わります。今回は純粋に平均をとりました。場合によっては最大値を取ったり中央値を取ったり、色々評価の方法も考えられます。
また、原価を考えて行う場合には、この評価平均値に原価の値を評価値として入れたり、色を入れたりとさまざまな評価を組合わせて設計できるため、一概に美味しいものがいいとも言えず、高いものを集めたから当然美味しいよねを評価関数の設計で変更できます。
ということで、今回はレシピ1、2、5が美味しいという結論に達しました。それでも平均3は行っていませんが。
次はこの3つのレシピから次の世代を作成します。作成の仕方もたくさんあります。今回はオペレーション的に次を作ることができませんでしたが、評判の比較的高かったレシピから次のレシピを作ることはできます。
簡単なのは、レシピ1、2の平均、レシピ2、5の平均、レシピ5、1の平均をそれぞれ取ることで、新しいレシピ6、7、8を作ることができます。
そして、その中でレシピ1、2、5、6、7、8の六種類を飲み比べることです。これを繰り返すことでより良いものを作っていくことができます。
また、今回は初期生成が五種類でしたので種類が少ないです。より広い味の関数の探索をするためには初期値をもたくさん取って良いと思います。関数にベイズ最適化なども利用できます。よりたくさんの候補から絞り込み最適化をかけていきますが、このオペレーションにかかるコストをいかに減らすことができるかが継続的な開発をする上で大事になってくるでしょう。
また、今回は行いませんでしたが、生成されたレシピの類似度を計算し、類似レシピは除外するというのも大事になります。類似度計算や回帰計算などで生成されたレシピの分布を見ることで類似度を把握し、実際に生成するかどうかを決めることができます。
このように新しい商品開発をするにしても数式を活用した最適化を応用することで効率的に機械的に計算をすることができます。
こちらはblueqat product marketingという形でこの辺りを全部フォローするコンサルティング&システム提供という形で企業のお手伝いをさせていただきます。よろしくお願いします。