見出し画像

TWSNMP FC:ポーリング結果をAI予測する機能の開発は失敗に終わった

浦和レッズ勝利!前半途中からウチ猫がTVの前に登場してから試合の流れが変わりました。猫は雨水を諦めたようで試合に集中して神通力を送っていました。おかげで完封勝利!「ありがとう、猫」、試合後もか猫は偉そうにしていました。今朝は、2時半と4時に猫が起こしてくれました。
4時から昨日できなかったbrain.js

のサンプルを真似してポーリングの結果をAIで予測する機能のテストプログラムを作ってみました。
サンプル程度の簡単な予測は問題なくできましたが、実際のポーリングログを使って学習させてAIに予測させてみると学習にかかる時間は長いのに予測はトンチンカンな結果しか出力しません。どうもチューニングしてなんとかなるような感じではなさそうです。今回は、この機能を組み込むことは止めることにしました。
失敗の記念に、作ってみたテストプログラムのソースコードを掲載しておきます。

 // 分析する数値データを識別する
 const keys = []
 for (let i = 0; i < logs.length && keys.length < 1; i++) {
   if (!logs[i].Result.error) {
     Object.keys(logs[i].Result).forEach((k) => {
       const v = logs[i].Result[k]
       if (!isNaN(parseFloat(v))) {
         keys.push(k)
       }
     })
   }
 }
 //学習データを集める
 const data = []
 logs.forEach((l) => {
   if (!l.Result.error) {
     const ent = []
     ent.push(l.Time)
     keys.forEach((k) => {
       ent.push(l.Result[k] || 0.0)
     })
     data.push(ent)
   }
 })
 console.log(keys)
 console.log(data)
 // LSTMTimeStepのモデルを作る
 const net = new brain.recurrent.LSTMTimeStep({
   inputSize: data[0].length,
   hiddenLayers: [10],
   outputSize: data[0].length,
 })
 // 学習する
 net.train(data, { log: true, iterations: 1000, errorThresh: 0.09 })
 // モデルで予測する
 const forecast = net.forecast(data.slice(-5), 3)
 console.log(forecast)

実行すると

[1623878600917498000, 1025000]

のようなデータ6400件を学習します。

iterations: 990, training error: 1623934835624501000

1000回学習してもエラーはまったく減りません。AIが理解できないということです。
そのまま予測すると

画像1

のような出力になりました。元のデータとは何の関係もない数値になってしまいました。AIは、かなり混乱しているようです。
ゆとり教育のAIなのであまり難しいことを言ってもかわいそうです。
なので、この機能は断念しました。

昨日からはじめた気象情報のポーリングは順調にデータをためています。

画像2

湿度をみると猫の好きな雨が降りそうです。
明日ここまでの機能をまとめたV1.2.0のリリースしようと思っています。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。