こんにちは。
ベガコーポレーション所属エンジニアの篠原です。
少し日が開いてしまいましたが、前回ご紹介したSAP PAのモデルをエクスポートし、プログラム(今回はJavaScript)で実行したいと思います。
また、ローカル環境で動かすだけではおもしろくないので、AWS λ(とAPI Gateway)を使用し、数値(説明変数の値)を渡すと予測結果を返してくれる予測APIを作っていきます。
前回記事
なお、本記事の内容は「第二回 合同勉強会 in 福岡」で発表した内容を一部変更してお送りします。*1
前回はお盆付近の結果が芳しくありませんでした。
お盆休みを休日設定していなかったためと考えられ、改善策として8月の13~15日を休日と設定し、再学習を行いました。
お盆付近の誤差が小さくなりました。
前回との比較が↓です。
赤丸(点線)で囲った区間の予測と実測値の値が小さくなっていることがわかります。
前回のRMSE
電力会社RMSE | SAP PA RMSE | |
8/1~8/10 | 91.71 | 49.25 |
8/1~8/16 | 78.07 | 93.92 |
↓
今回のRMSE
電力会社RMSE | SAP PA RMSE | |
8/1~8/10 | 91.71 | 52.36 |
8/1~8/16 | 78.07 | 84.37 |
8/1~8/22 | 83.06 | 78.56 |
モデルが正常に作成されたら、ソースコードを生成することができます。
JavaScript(HTML)でエクスポートします。
JavaScript(HTML)の場合ブラウザ上で、予測結果を算出することができます。
ユーザが数値を入力し、予測値を確認するだけであればエクスポートしたHTMLを公開するだけでOKですが、やはり別のアプリケーションやプログラムと連携するためにWeb APIとしたいと思います。
まずは出力されたコードを確認します。
HTML部分はブラウザで表示するためのものですので、node.jsでプログラムするAWS λには必要ありません。
λ関数を作る際にはJavaScriptのfunctionを持っていきます。
但し、computeScore0( form )はAWS λのexports.handlerファンクションに代入します。
また、node.jsなのでformを扱えないので、computeScore0関数内のformをJSONに変換します。
↓このように変更します。ほかの関数はそのままで大丈夫です。
API Gatewayから作ったλ関数を呼び出せる様にします。
メソッドはGETでもPOSTでも、用途に合わせてお選びください。
GETで作り、呼び出してみます。マッピングテンプレートに↓を設定しました。
日付ではなく年間通算日と曜日と平日/休日をパラメータとして渡さなければなりませんが、内部処理で日付から変換するなどしてもOKです。
但し、λでRDSを使用する際は注意が必要です。
味気ないですが、結果はこんな感じです。
GETパラメータで年間通算日や気温などを渡しています。
まとめ
一部コードの書き換えをしなければなりませんでしたが、SAP PAのモデルをAWS λで動かすことができ、予測APIを作ることができました。
モデルを作り、予測値が算出できるのであれば、他のアプリケーションと連携したくなると思いますが、SAP PAでエクスポートされたモデルは再学習などは行えない代わりに、比較的軽量*3であるため、AWS λでも実行可能です。
*1:第二回 合同勉強会 in 福岡ではJavaScriptでなくJavaで発表しました。
*2:電力の予測は弊社業務とは全く関係ありませんが、弊社で行っている分析業務でもこんな感じの考察をしながら行っています。
*3:説明変数が増えると重くなり、説明変数10個でも1 kstep近くありますが、予測値の計算しかないので学習と予測を切り分けできないライブラリなどより軽量です。