LSTMで売上の予測っぽいことを試みる時の失敗例。LSTMで売上の予測っぽいことを試みる時の失敗例。Consoleの使い方2017-10-29LSTMで売上の予測っぽいことを試みる時の失敗例。Console最初にお断りしておきますが、今回の記事は「うまくいかなかった例」です。恥ずかしながら、うまくいくと思ってやってみたけど、勘違いしていてダメだった)というのも情報だという開き直りで書いています(笑)。2017/12/02追記>以降の説明の画面はVersion1.00のものを使ってます。>Version1.10から一部アイコンのデザインが変わってます>ただ、見たらわかる程度だと思ってますので貼り替えてません。何をしようとしたか?前回、SINカーブのトレースをやってみて、あることを思いついたわけです。入力(X)に対して、Auto_Encoder的に出力(X')を比較的正確にトレースできた。それを時系列データとして扱っているから、ある時点の入力(X)の次の状態(未来)を出力(X')は表している・・ということではないのか?です。すれば、そのアウトプットを継ぎ足していけば、少しずつの未来になるから、未来の状態の予測にもなったりするんじゃないだろうか?と考えました。売り上げデータで試してみることにしました。最初にも書いたとおり、今回は・・それがダメダメだったんですけどね。ちなみに、同じような売り上げデータを使って、もう少し、ましな予測っぽいことをやってみた記事はこちらです。arakan-pgm-ai.hatenablog.comさて、始めます前回の続きです。ネットワーク自体は、前回組んだものを、ほぼ、そのまま使います。arakan-pgm-ai.hatenablog.com売上データの用意まず、元データとして11週間分の日別売上データを用意しました。だいたい3%から10%の範囲で凸凹しながら、トレンドとしては上昇傾向にあるデータにしてみました。グラフにすると、こんな感じです。このデータを7日間ずつの「7行1列」データにして、LSTMに学習させてみて、最終週のみの7日間で評価を行えば、0_0000フォルダに出力される出力(X')は、その近未来の数値なんじゃないか・・と考えたわけです。その売上予測のアウトプットを、インプットに追加して再学習させて、また最終週のみで評価することを繰り返せば、未来の「売上予測(みたいなもの)」になるかもしれないな・・・。いうことを考えたわけですね。1.0」の数値に変換します。このC列に作ったデータだけを、7行ずつ11個のCSVファイルに分割します。7行ずつ11個のファイルにわけるVBAソース今回はシート名「forward01」に上記データを作成し、例によって以下のような使い捨てのEXCELマクロで作成しましたが、EXCELでCSVファイルで保存して、手で加工してもできます。ファイル名をわりふりました。これを、ニューラルネットワークコンソールのインストールフォルダの下の「sample_dataset」以下に適当なフォルダをつくってコピーしておきます。そのフォルダのパスとファイル名を記述したデータ・セット用CSVを作ります。トレーニング用には11ファイルすべて。バリデーション用には、最後の10.csvファイルだけで作ります。これでデータの準備はできました。テキストデータのデータ・セット用CSVについては、以下の記事でも解説しています。arakan-pgm-ai.hatenablog.comLSTMのプロジェクトを開く以下の記事で組んだLSTMのネットワークをそのまま使います。arakan-pgm-ai.hatenablog.comニューラルネットワークコンソールを立ち上げて、上記の記事で保存したプロジェクトを開き、名前をつけて保存で、適当なプロジェクト名で保存します。DATASETタブDATASETタブを開き、trainingとvalidationに、前に作成したトレーニング用データ・セットCSVとバリデーション用CSVを関連づけます。フォルダを開き、各データセット用CSVを選択すればOKです。各レイヤーのパラメータを設定する以下の記事と手順は同じなので、繰り返し説明はしません。arakan-pgm-ai.hatenablog.com上記の記事を参照してください。違いは、上記の記事のデータが「25行1列」で、今回が「7行1列」という点だけなので、上記記事の「25」の部分を「7」に読み替えればいいだけです。学習ボタンを押して、学習します。結果はこんな感じです。きれいに収束してますね。続けて評価を行います。1ファイルだけなので、あっさりしたものですね。評価結果をインプットファイルに回すここからが、今回試してみたいことの肝です。この評価によって出力されたX'のファイルをインプットに追加して、さらに、その先を予測してみる・・というのを試みます。files(プロジェクト名がmy_lstm.sdcprjなら、my_lstm.files)フォルダの下で、例によって、学習・評価の識別番号と同じフォルダの下の「0_0000」フォルダの下にいきます。そこにある「0.csv」ファイルを、エディタ等で開くとこんな感じに、1行7列のデータになっています。それを改行させて、7行1列のデータにして、「11.csv」等に名前を変更して保存します。こいつを、データフォルダに移動させます。データ・セット用CSVのトレーニング用に、11.csvの行を追加して、バリデーション用のデータ・セット用CSVのファイル名も、11.csvに修正するんですね。して、DATASETタブでもう一度、ファイルを読み込み直します。して、trainingの件数が12になって、validationのファイル名が11.csvになってればOKです。このデータを追加してから、再度学習させるってのが、今回のアイディアの肝だと思ってました。しないと、前のパラメータだと、何回評価だけを繰り返しても一番最初に評価したときと同じような結果しか出力されないはずだということですね。再度評価して結果を確認するここで再度評価すると、新しいフォルダの0_0000フォルダの下に、0.csvができるんですね。して、一つ前の評価結果の0.csvをコピーして、もとデータを作ったEXCELのデータ最後尾の次から「行列を入れ替えて値のみ貼り付け」をして、そして、その次に評価した結果の0.csvの内容もコピーして同じように後ろにくっつけます。して、その結果に✕100000をして、もとの金額にもどしてやります。上の黄色い網掛けの部分が、評価で出力された0.csvの中身を貼り付けたものです。その結果をグラフにしてやります。赤枠で囲った部分が、評価によって出力されたX'の値です。おお!なんとなく、予測っぽく見えます。上昇トレンドはとれているし、日別の凸凹もトレースできてます。なんて・・一瞬、思ってたんですけどね。テンションあがってたのはここまで(笑)しかし・・。実際には、そんなわけありませんでした。Ver1.00でやった時には、なんとなくいけてるように思えてたのですが、Ver1.10にバージョンアップしてやると数値が変わって、まんま、前の数値をなぞって生成しているという感じになってしまいました。予測でもなんでもありません。単なるAuto_Encoderです(笑)よいアイディアだと思ってみたんですけどね・・、そう甘くはありません。今回のアプローチの反省点RNN(リカレントニューラルネットワーク)での予測はしっかり結果(y)を推論するようにしないとダメなんだという、基本的な点が抜け落ちていたことですね。Googleグループでも同じ話題がコメントされてました。groups.google.comやれやれです。2017/12/02追記Version1.10では以下の部分のアイコンデザインが変更になってます。08:00LSTMで売上の予測っぽいことを試みる時の失敗例。検索スポンサーリンク最近のアクセス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さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。