チョコボール統計

チョコボールの秘密を統計解析で明らかにしていく。おもちゃのカンヅメ欲しい。

Chainer Meetup #09 でLT:チョコボール数の傾向を分析

【概要】

  • 3/30に開催のChainer Meetupに参加してきました
  • ただ参加するだけではつまらないので、LTしてきました
  • 本記事ではLTの概要と資料をまとめます

f:id:hippy-hikky:20190401211805p:plain

【目次】

はじめに

chainer.connpass.com

今回で2回目の参加となりましたChainer Meetupですが、今回もとても興味深い話が聞けて良かったです。 Chainerの中の人の開発情報が聴けるというのはもちろん良かったのですが、 nVidiaの中の人の講演が今回もとても興味深かったです。 前回もパフォーマンスチューニングについてとても興味深く聞いていましたが、今回は自分でも取り組めそうな話で希望が持てました。 資料はconnpassのイベントページに公開されているので、興味ある方はご覧になられたらと思います。

本記事ですが、 前回に引き続き今回もLTをさせてもらったので、 どのような話をしたのか概要をまとめておくものです。

【トップに戻る】

資料

当日使用した資料は以下です。

【トップに戻る】

LT概要

今回のLTでは、チョコボールの個数を分析した話をしました。

チョコボール(ピーナッツ味)は、内容量が28gと定められています*1。 内容量(重量)が定められているのですが、 ピーナッツは自然のものであるため大きさや重さを厳密に一定にすることはできません*2。 そのため、一箱に入っているチョコボールの個数は箱ごとに異なります。

一方、せっかくチョコボールを買うなら美味しいものを食べたいのですが、 小さかったり形がいびつなチョコボールは味もいまいちな印象です(個人的な感想であり品質を保証するものではありません)

そこで、チョコボールの粒が大きく揃っているものを購入するにはどのようにすれば良いのかについて、 個数の傾向から考察してみたという話です。

【トップに戻る】

データと分析アプローチ

データ収集効率化の取り組み

(詳しくは上記の資料を参照ください)

個数の傾向を分析するには、各商品に個数がいくつ入っていたのかを計測し、 データを利用できる形に整理することが必要です。 しかし、一つ一つ数えるのはなかなかの手間です*3

そこで、Faster R-CNNを使ってチョコボールを検出するWebサービスを開発しました。 これで、写真を撮るだけで個数が自動で計測できます! (ここまでは、前回のLTでお話ししたところです)

www.chocolate-ball.net

しかしながら実際のところ、 このシステムは計測の場面ではまだ実運用できておらず、 手で数えています*4。 ChainerのイベントでChainerについて一切触れないのはマズかろうということで(大人の事情)。

実験に利用したデータの概要

ということで手で数えて収集したデータですが、2017年11月から2019年3月まででピーナッツ味373箱分のデータを利用します。

f:id:hippy-hikky:20190401222052p:plain
チョコボール(ピーナッツ味)の個数のヒストグラム

このデータを賞味期限が同じチョコボールをひとまとめにして、個数の分布(箱ひげ図)を確認してみてみます。 なお、チョコボールには製造年月日の記載が無く、賞味期限が月単位で表示されています。 そのため、賞味期限が同じであれば、同じ時期に製造されたものであると仮定して、データを分析します。

f:id:hippy-hikky:20190401222325p:plain
賞味期限ごとの個数分布。横軸はパッケージに記載の賞味期限。縦軸はチョコボールの個数。

上記の図からわかるように、2018年の8~10月の個数が少ないように見えますね。 また、2019年の8~10月もデータ数が少し少ないですが、同様に個数が少ないように見える気がします。

そのため今回は、賞味期限が8~10月の個数が他の期間と比べて有意に数が少ないのかを確認してみます。 この期間の数が少ないことが統計的に確認できたならば、 賞味期限が8~10月のチョコボールを狙って購入することで、粒の大きいチョコボールを手に入れられる可能性が高まる と期待できます。

他にも分析する軸は考えられますが、今回は時期による個数の変化にだけ注目します。

【トップに戻る】

モデル

個数の傾向を分析するに当たって、下記の統計モデルを設定しました*5

f:id:hippy-hikky:20190401223413p:plain
チョコボールの個数に関しての統計モデル(階層ベイズモデル)。

一箱に入っているチョコボールの個数yは、ポアソン分布Poi(\lambda)に従う確率変数と考えます。 ポアソン分布のパラメータ\lambda_iは各月iの平均個数を示すパラメータであり、 ガンマ分布Gamma(\alpha, \beta)を事前分布とします。 ガンマ分布のパラメータ(\alpha, \beta)は任意に設定するのではなく、 それぞれ階層事前分布を設定してデータから推定させることにします。 ガンマ分布のパラメータ(\alpha, \beta)は、 平均\mu標準偏差\sigmaを示すパラメータを使って以下のように算出されます。

\displaystyle{
\alpha =  \mu^{2}/\sigma^{2} \\\
\beta = \mu / \sigma^{2}
}

今回は、8~10月の期間のデータから推定した事前分布(Gamma(\alpha_0, \beta_0))と、 その他の期間のデータから推定した事前分布(Gamma(\alpha_1, \beta_1))を比較し、 統計的に差があるのかを確認します。

【トップに戻る】

結果

上記のモデルを使い、パラメータを推定しました。
パラメータは、MCMCアルゴリズム(NUTS)を利用して数値的に推定しました。

推定した二つのガンマ分布は以下のようなものです。

f:id:hippy-hikky:20190401223516p:plain
事前分布の推定結果。上が8~10月の期間の推定事前分布。下がその他の期間の推定事前分布。8~10月の期間が平均で約1.4個少ない。

95%信用区間で分布の平均に差があるのかを確認するために、 平均のパラメータの事後分布の差の分布を以下に示します。

f:id:hippy-hikky:20190401223705p:plain
推定された事前分布のパラメータの差の事後分布。左が平均の差で、90%信用区間が0を超えており、差があることを示している。右は分散の差で、こちらはモードが0の付近であり、差がないことがわかる。

ということで、二つの分布に差がないことを示す0の位置が90%信用区間から外れているため、 二つの分布の平均には差があるであろうということがわかりました。

その差は、約1.3個。

以上の結果、賞味期限が8~10月のチョコボールは個数が少ないということがわかりました。 資料p.22にポアソン分布の各月のパラメータ\lambda_iの事後分布を載せていますが、 2018年だけでなく、2019年の8~10月も同様に個数は少ないと言えそうです。 そのため、賞味期限が8~10月のチョコボールを狙って買えば、粒の大きいチョコボールを手に入れられそうです!

【トップに戻る】

終わりに

ということでチョコボールの個数の傾向を分析し、 特定の月の個数に差がありそうだということまではわかりました。

しかし、今回は8~10月を予め切り分けてパラメータを推定したので、 8~10月だけが少ないのかはわからないです。 データから変化点を合わせて推定させることが必要と考えています*6
(実は、変化点を推定する実験を最初にやってみたのですが、推定結果が安定せずでして、プログラム上に問題があるのか、モデルがまずいのか検討中の状態です。。。)

また、チョコボールの大きさが大きくて粒が揃っているというのは、 個数だけで特徴付けられるのかについて、はっきりとした確証はありません。 そのため、大きさのばらつきについても今後調査していきたいと考えています。

【トップに戻る】

参考文献

  1. データ解析のための統計モデリング入門

    一般化線形モデルを軸に階層ベイズモデルまで丁寧に記載されている。 Rとstanを利用した実装例もあるが、実装部分は無視しても理解できる。

  2. Pythonによるベイズ統計モデリング

    Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド

    Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド

    pymc3を使った入門書。 理論面も多少書かれており、こちらで手を動かしながら学習するのが良いと思う。

  3. Pythonで体験するベイズ推論

    Pythonで体験するベイズ推論 PyMCによるMCMC入門

    Pythonで体験するベイズ推論 PyMCによるMCMC入門

    pymcを利用した事例ベースの参考書。 事例が豊富で参考になるシーンは出てくるかもしれないが、階層モデルについては記載がない。 また、pymc2なので、pymc3と記法が少し違うので注意。

【トップに戻る】

広告

Amazonの欲しいものリスト作ってみました。 チョコボールのカンパ募集中です。
チョコボールをカンパする

森永製菓 チョコボール<ピーナッツ> 28g×20箱

森永製菓 チョコボール<ピーナッツ> 28g×20箱

【トップに戻る】

*1:設定値は28gですが、実際の重量傾向についてはこちらの記事を参照ください

*2:製造時のばらつきがあるため、どの味でも厳密に大きさを一定にすることはできません

*3:資料p.5の画像から16個だってすぐにはわからないですよね

*4:正直、手で数えた方が速い。僕の作りが悪いので改良していきます

*5:このモデルは階層ベイズモデルと呼ばれています。データ解析のための統計モデリング入門Pythonによるベイズ統計モデリングが参考になると思います。

*6:変化点検知については、Pythonで体験するベイズ推論に記載があります。