新・日々の暮らしに疲れてない?

一人バンド、火頭工房

TensorFlow.jsで来客人数予想。

少し前から学習しているTensorFlow.jsですが、そろそろ何か使えるものが作りたい。

 

学習しながら漠然と考えていた作成予定のモノ。

1、画像認識を使って自動販売機を作る
2、クローム拡張機能にtensorflowを取り入れた何か
3、店の来客人数予想

 

1はまだ学習不足なのと実際に動かすには物理的な工作が必要になる、そっちの知識が皆無。


2はニュースサイトなどで邪魔な記事を消す機能を作りたい。文字、文章を理解させる構造を作るのが大変そう。文字をテンソルとして扱うのはどうするんだろう?

 

というわけで今回は3に取り組みました。

 

私、実は自分で作った加工品などを某店舗で販売して頂いているのですが、販売スペースも限られているので、どれくらい納品するべきか、どれくらい売れるか、というのはやはり気になるわけです。

 

数年やってりゃ7月はこんな感じ、とか11月はこれくらい、など分かりますし、
前年の記録を見て決める、など当たり前のやり方をしています。

 

とはいえ、来客人数を決める要因は季節(月)の他、曜日、日付、天気、温度などがあるでしょうし、祝日があるか、地域に観光バスが来るかどうか、など色々考えられます。

 

これらをtensorflow.jsで予想してもらいます。

 

まず、データを用意することが大事。

表計算ソフトでデータを用意し、csvファイルとして保存、それをjson形式に変換し、
javascriptで操作するようにしましょう。

 

今回作るのは簡易版として、用意する項目は...

 

月、曜日、最高気温、天気、祝日、閉店、来客数


ということにしましょう。日付も大事かと思いましたが、2月5日だから人が多い・少ない、というよりも曜日の要素の方が強いかな、と思いまして。

 

↓こんな感じ。

f:id:hiatama:20180730144907p:plain

 

月は1~12で入力していますが、tensorflowに渡す時は0.01~0.12のような小数点以下の形で渡します。
曜日は1~7で月~日曜日までを表します、やはり小数点以下の形に直して計算させます。
天気は0~4で、晴れ、くもり、雨~などを表します。
祝日、閉店は0か1かで渡します。閉店は年末年始など営業していない日です。

 

これを2016年までさかのぼって用意します。

 

天気、最高気温はこういうサイトで確認できます。
https://www.data.jma.go.jp/obd/stats/etrn/index.php
ただ天気に関してはあまり正確ではなさそう、アメダスとかで検索した方が良いかも。

 

一番困るのは実際の来客数なんですよねぇ。これはお店の人に教えてもらうしかないのですが、私がコミュ症なのと、なんのために1000件以上になるであろうデータを使うのか、など聞かれるわけで...


まさか夏休みの自由研究に、とも言えないわけで、小学40年生じゃあるまいし。


とりあえず、それらしい人数をでっちあげて入力しておきましょう。

この入力作業、2016年1月1日~2018年7月末現在までですから、結構大変です。

 

んで、このファイルをCSVという形式で保存します。
それを変換できるサイト調べてJSONの形に直してもらいます。

 

そうしましたらば、

var myJson = [
{
"month": 1,
"day": 5,
"temp": 11,
"weather": 0,
"holiday": 0,
"closed": 1,
"customers": 0
},
{
"month": 1,
"day": 6,
"temp": 13,
"weather": 0,
"holiday": 0,
"closed": 1,
"customers": 0
},
以下略

 

こんな感じでjavascriptでいじれるようになります。

これをテストデータ(xs)とラベルデータ(ys)に分けてリストにします。
for inループでも回して、xsとysのリストを作る。xsとysについては以前のエントリーを読んで頂ければ。

 

さきほど書いた通り、tensorflowさんは小数点以下の形がお好きなようで、適宜正規化します。
例えばxsは、[0.01, 0.5, 0.13, 0.1, 0, 0] このような形になり、

左から、[1月、金曜日、最高気温13度、くもり、祝日×、閉店×] という風に表します、最終的には違う正規化をすると思いますが、わかりやすくしておかないとテストがしにくいので。

 

ysは[0.033]で、来客数33人を表すなど。


xsの条件の時、ysの結果になりました、というのを様々な角度からtensorflow様に学習してもらうわけですね。

 

この2つのリストをtensorの形にして、tensorflowさんに渡し、計算方法などを指定すれば学習してくれます。

 

計算中のTensorflow様。

f:id:hiatama:20180730144700p:plain


表示されている数字ができるだけ低くなるよう、計算方法やオプティマイザーと呼ばれるものを選んだりします。件数がまぁまぁ多いようで、遅い。

 

計算終わり。早速、予想してもらいましょう。

多少のインターフェースを用意しました(こういうのが一番苦手)。

f:id:hiatama:20180730144821p:plain

 

条件: 3月の日曜日、最高気温23度、晴れ、祝日ではなく、店舗は営業日。


さていかに!

 

f:id:hiatama:20180730144941p:plain

 

ウーム、この数字が正しいのかは正直よくわかりませんな。

 

↓最高気温を5度とさむぅい一日にしてみた所、予想人数は減りましたので、
まぁまぁ学習している模様、もっと減っても良くない?笑

f:id:hiatama:20180730145033p:plain

 

その他、月曜日や雨の日は予想人数が少ないなど、一応用意したデータ通りの結果になっています。

 

一応テスト終了。

 

あとはお店にお願いして、正確な来客人数を入手し、入力。
より細かい天候データを入力。

日付を入れるとどうなるか、その他の要因が必要かどうか。
調整を繰り返し...

 

これでお店の来客数が予想できるわけですが!!!

「アッ アノッ ライキャクスウ クダサイ…」

...お店に行って怪しまれるの嫌だなぁ...

 

おしまい