VEGA TECH LAB

インテリア×テクノロジー

SAP Predictive Analyticsの予測をAWS λで

こんにちは。
ベガコーポレーション所属エンジニアの篠原です。

 

少し日が開いてしまいましたが、前回ご紹介したSAP PAのモデルをエクスポートし、プログラム(今回はJavaScript)で実行したいと思います。

また、ローカル環境で動かすだけではおもしろくないので、AWS λ(とAPI Gateway)を使用し、数値(説明変数の値)を渡すと予測結果を返してくれる予測APIを作っていきます。

前回記事

blog.vg-lab.com

 

なお、本記事の内容は「第二回 合同勉強会 in 福岡」で発表した内容を一部変更してお送りします。*1

 

モデルの改善 
タイトルとは直接関係ありませんが、モデルの改善を行いました。

 

前回はお盆付近の結果が芳しくありませんでした。

f:id:cxalpha:20170821081931p:plain

 

お盆休みを休日設定していなかったためと考えられ、改善策として8月の13~15日を休日と設定し、再学習を行いました。

 
今回の結果が↓です。

f:id:cxalpha:20170831124952p:plain

お盆付近の誤差が小さくなりました。

前回との比較が↓です。

f:id:cxalpha:20170831125306p:plain

赤丸(点線)で囲った区間の予測と実測値の値が小さくなっていることがわかります。

 

前回の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
 
8/10までのRMSEは上がってしまいましたが、8/16までは改善し、8/22までに電力会社予想を再逆転しました。
しかし、お盆付近の予測値は電力会社の方が良く、お盆や年末年始などでは通常の休日とは区別したほうが良いのかもしれません。*2
 
 
モデルのソースコード生成

モデルが正常に作成されたら、ソースコードを生成することができます。

f:id:cxalpha:20170831140446p:plain

 

JavaScript(HTML)でエクスポートします。

f:id:cxalpha:20170831140531p:plain

 

JavaScript(HTML)の場合ブラウザ上で、予測結果を算出することができます。

f:id:cxalpha:20170831141149p:plain

 
AWS λ + API GatewayでSAP PAの予測API

ユーザが数値を入力し、予測値を確認するだけであればエクスポートしたHTMLを公開するだけでOKですが、やはり別のアプリケーションやプログラムと連携するためにWeb APIとしたいと思います。

 

まずは出力されたコードを確認します。

f:id:cxalpha:20170831142457p:plain

 HTML部分はブラウザで表示するためのものですので、node.jsでプログラムするAWS λには必要ありません。

λ関数を作る際にはJavaScriptのfunctionを持っていきます。

 

但し、computeScore0( form )はAWS λのexports.handlerファンクションに代入します。
また、node.jsなのでformを扱えないので、computeScore0関数内のformをJSONに変換します。

f:id:cxalpha:20170831150347p:plain

   ↓このように変更します。ほかの関数はそのままで大丈夫です。

f:id:cxalpha:20170831152246p:plain

API Gatewayから作ったλ関数を呼び出せる様にします。

メソッドはGETでもPOSTでも、用途に合わせてお選びください。

GETで作り、呼び出してみます。マッピングテンプレートに↓を設定しました。

f:id:cxalpha:20170831152514p:plain

 

日付ではなく年間通算日と曜日と平日/休日をパラメータとして渡さなければなりませんが、内部処理で日付から変換するなどしてもOKです。
但し、λでRDSを使用する際は注意が必要です。

 

味気ないですが、結果はこんな感じです。

GETパラメータで年間通算日や気温などを渡しています。

f:id:cxalpha:20170831152751p:plain

 

まとめ

一部コードの書き換えをしなければなりませんでしたが、SAP PAのモデルをAWS λで動かすことができ、予測APIを作ることができました。

モデルを作り、予測値が算出できるのであれば、他のアプリケーションと連携したくなると思いますが、SAP PAでエクスポートされたモデルは再学習などは行えない代わりに、比較的軽量*3であるため、AWS λでも実行可能です。

*1:第二回 合同勉強会 in 福岡ではJavaScriptでなくJavaで発表しました。

*2:電力の予測は弊社業務とは全く関係ありませんが、弊社で行っている分析業務でもこんな感じの考察をしながら行っています。

*3:説明変数が増えると重くなり、説明変数10個でも1 kstep近くありますが、予測値の計算しかないので学習と予測を切り分けできないライブラリなどより軽量です。