日別売上の予測っぽい事に再チャレンジ。日別売上の予測っぽい事に再チャレンジ。Consoleの使い方2018-04-04日別売上の予測っぽい事に再チャレンジ。Console今回は「日別売上の予測」という一度失敗している課題に再チャレンジしています。「時系列データをLSTM」で処理する方法では結果がでず、CNNを使ったアプローチで予測する方法で試してます。前回の反省点を整理する前回は恥ずかしながら、うまくいきませんでした。arakan-pgm-ai.hatenablog.com問題は、入力のXから生成されたX'をつかって、AutoEncoder的に生成したものが、なんとなくうまく行ったように見えたので、調子にのったことです(;^_^A。最終的に結果(y)を推論しないで「予測らしきこと」をしようという発想には無理がありすぎましたね。Googleグループでも同じ話題がコメントされてました。groups.google.comまあ・・、「こうしたらダメだよ」というのも情報ですから(笑)開き直って、やってみます。最初はLSTMでやろうとしてみました上記のGoogleグループでのコメント等を参考にするならば、7日分の売上データがデータ(x)で、次の7日分の売上を結果(y)するアプローチが必要です。仮に、7日間の売上を7列1行の1週間分1ファイルで、0.csv、.1.csv・・のように作ったとしたら、イメージとしてはこんな感じ。x:data,y:label.\0.csv,./1.csvこれを学習させて、最終週の7日分(x)のみ与えて、次週を予測させる。こんな感じになるはずで、実際にこれをやるとしたら、学習データは、7日分(x_0~x_6)を収めたCSV(x)に対して、結果(y)の次の7日分をy__0~y__6に展開するようなことになるはずです。このやり方はこちらのチュートリアルでも紹介されてますので、まあ、あってはいるでしょう。support.dl.sony.comただ、なかなかしっくり来なかったです上記のデータセットを使ってやってはみました。やったぞとブログに書けるような結果はでませんでした。用意できた学習データの量がせいぜい1年分(52週)程度と少なかったのか、それとも自分がRNNを理解してモデルを組めてないのか・・、まあ、両方なんでしょうね。試行錯誤した結果、LSTMを使わないアプローチを試すことにします。こちらのスライドの31ページ目にも書いてありますから、いけるかな・・と。Inc.www.slideshare.net直近7日間の数値で翌日を予測するアプローチアイディアはこうです。7日間の時系列データで、7日分の予測をするのではなく、1日ずつずらしながら、直近7日分の数値を一塊のデータとして、8日目の数値を予測する。すれば、同じ期間の数値(例えば売上等)でも学習用データの量としては7倍にできますし、なにより、時系列で処理する必要がないので、普通のニューラルネットワークで対処できそうです。使い方18の時同様に、日別の数値(売上?)を用意して、1.0~-1.0の範囲になるように100000で割って少数以下の数字にします(C列)。これを、7日間をx__0~x__6のデータとして、8日目をyとする以下の1行8列のデータにして以下のようなCSVデータを作ります。このやり方はNNCのチュートリアルのこの記事を参考にしています。support.dl.sony.com例によってCSVデータを生成するEXCEL-VBAプログラム今回は、これで約5ヶ月分(約150行くらい)を学習用、同じフォーマットで最後の1週間分(7行)を評価用として2つのファイルを作りました。手で作ると大変なので、こんな感じでEXCELのVBAでCSVデータを作って、あとで学習用と評価用にわけました。ちなみに、ソースコード中の「forward01」は、シート名ですので、適宜書き換えてください。Subネットワークモデルニューラルネットワークコンソールを立ち上げて、EDITタブでモデルを組みます。今回学習に使ったモデルです。Inputinputは、x__0~x__6の7列+結果ラベル(y)の1行8列なのですが、チュートリアルにあるとおり、x__0~x__6の部分だけ・・つまり、7をサイズにします。他のレイヤーの設定AffineとTanhのあたりはoutshapeを7にあわせる以外は特別なことはありません。回帰問題なので、最後はsquarederrorにします。T.Dataset(アウトプット)は「y」です。学習の実行これで、DATASETに、さきほど用意したCSVファイルを指定して、学習させます。学習のグラフはこんな感じ。最初の方は、かなり「暴れる」感じのグラフになるんですが、50epochあたりから収束してきました。グラフだと100epochもあれば十分なようにも見えるのですが、今回、自分で試行錯誤した結果から言えば上記のように300epochくらいが最良でした。バッチサイズもいろいろ試しましたが、ちょっと時間がかかりましたが、一番結果がよかったのは「1」でした。今回、用意した数値(いちおう、売上想定で1週間の曜日で凸凹をつけて、全体的には上昇トレンドを意識して作ったもの)は使い方18で使ったものの流用です。期間をのばして約5ヶ月分の日別にしました。グラフに描くと、全体としてはこういう見てくれです。あ・・、データは小数点以下なんですが、グラフにするときには100000倍にして、元の整数部5桁の数字にもどしてますので、念のため。このうちの最後の方だけを拡大してみると、作成したデータはちょうど頂点あたりで終わってます。この続きを予測して継ぎ足してみて、不自然でない数字が予測されていれば、一旦はOKと判断できるんじゃないかと思ってます。評価結果を加工しながら順次評価さて、評価を実行した結果です。プロジェクト名.filesフォルダの実行日付_時刻フォルダ(20180404_130520等)の下「output_result.csv」を開きます。すると右端に「y'」の列があるので、その数値を結果としてコピーします。実際には、その行のx__1~x__6を、x__0~x__5にずらして、結果のy'をx__6にして、また評価して・・みたいに地道にやる必要があったりします。これはかなり面倒くさいので、今回のようにお試しでないなら、nnablaとかでプログラム組んだ方がよいとは思いますが・・とりあえず、今回はやってみました。結果を確認する結果のグラフです。赤枠で囲った部分が、予測によって生成された数字です。上昇トレンドも含めて、かなり、正確に予測できているような気はしますね。今回はちゃんと推論した結果(y')を使ってますし。一応、「予測っぽい」くらいのことはできてるんじゃないですかね。17:48日別売上の予測っぽい事に再チャレンジ。検索スポンサーリンク最近のアクセスTOP5ブクマ数TOP3IT的なTIPS・ノウハウイベントログから抽出したログオン・オフ時刻を見やすいように整形するEXCELのVBAマクロなど。Google検索は利用するけど、アクティビティを保存させたくない時もある文字コードで悩まされるなんて久しぶり/JIS7(ISO-2022-JP)とJIS8の話もっと見る作業時によく参照する「まとめ」djangoテンプレート内でforループで回す時の整理とデフォルト辞書利用時の注意など。djangoテンプレート内ので条件分岐(IF文)で注意することなどをまとめておくdjangoテンプレート/変数の値の参照の仕方が、Pythonと違う所があるので整理しておく。service」とサーバーレスコンピューティング関係をまとめてみる。PWA・SPA・・など「最近のWEBアプリケーションの種類」をざっくりまとめる。文系的まとめディープラーニング(ニューラルネットワーク)の「学習」の肝は「微分」らしいよ。Consoleもっと見るディープラーニングのデモをやってみるWord2Vecで「単語の足し算・引き算の結果(単語)を取得する」デモをやってみる。API」で入力文の疑わしい部分をAIが指摘するデモを作る。classで事前学習済のVGG16モデルを使った画像識別クラス/tensorflow2.0(tf.keras)ランダムフォレストで回帰してみる/気象情報と電力データその2もっと見るPythonでWebアプリやってみるviews.py(python)からデータを渡して、Chart.jsでRaderチャートを描く/Chart.js+djangoWEBブラウザ上にドラッグ&ドロップした画像ファイルをBase64に変換して表示するWEBブラウザで手描きしたイメージをJPEG・PNG変換後Base64エンコードするもっと見るPythonで自動化やってみるWebアプリケーションで自動的に値を参照、スクロール他Tips/Selenium&pythonWebアプリケーションで自動的に何かをクリックするTips/Selenium&pythonWebアプリケーションへの自動入力・選択のTipsあれこれ/Selenium&pythonもっと見るPythonで数学・グラフィックスやってみるモンティ・ホール問題で、ちょっと暇つぶし。最近、台風が怖すぎる!!!生産性向上しろと言いながら、片方で足をひっぱるなんて・・と呆れてます。/軽減税率のニュースを見てもっと見るBOKU62歳の文系SE”BOKU”です。<arakan_no_boku@yahoo.co.jp>興味の向いたものを、つまみ食い的に勉強してます。自分が消化した内容を、頭の整理と備忘を兼ねてブログに書いてます。IT系・・特に機械学習・プログラムネタが中心ですが、IT以外のネタになる時もあります。(43)スポンサーリンクはてなブログをはじめよう!arakan_no_bokuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。