1.1.3.6. 予測自動化の実装・動作確認をする¶
本項では、「Node-AI Berry」を使用した予測自動化の実装・動作確認手順について記載します。
以下、Node-AI Berryをデプロイするサーバーインスタンスのことを「Berryサーバー」と呼びます。
前提条件を確認する¶
あらかじめ、これまでの「1.1.3.5. Node-AI Berryの環境を構築する」に記載されているすべての作業が完了していることを確認してください。
予測用データを用意する¶
- Node-AI Berryでの予測に用いる予測用データであるcsvファイルを作成します(本構成ガイドではファイル名を「sensor.csv」としています)。このcsvファイルは、「1.1.3.4. Node-AIの環境構築・学習モデルを作成・エクスポートする - 目的変数と説明変数を設定する」で説明変数に選択した列と同じ列分、また行数は「時間窓切り出しカード」内で設定した「M(窓幅)」の値と同じまたはそれ以上の行数を用意したものになります(今回であれば180行分以上用意します)。
上記csvデータをWasabiオブジェクトストレージ(以下Wasabi)に配置します。本構成ガイドでは配置先を「nodeai-bucket/Node-AI-Berry-csv」としています。
自動化スクリプトを作成する¶
- "API自動実行"・"予測値をテキストファイルへ出力"・"予測値テキストファイルをWasabiへアップロード"を実行するスクリプトを作成します(本構成ガイドでは予測値テキストファイル名を「prediction.txt」とし、配置先を「nodeai-bucket/Node-AI-Berry-txt」としています)。
「1.1.3.5. Node-AI Berryの環境を構築する - Ubuntuを初期設定する」で作成した作業用ディレクトリにて以下のスクリプト「csv_to_cmd.py」を作成してください。
注釈
- 「model_id」には「1.1.3.5. Node-AI Berryの環境を構築する - 学習モデルをアップロードする」で取得したモデルIDを入力してください。
- このスクリプトは「sensor.csv」を配置したWasabiの選択したリージョンが「ap-northeast-1」の場合です。
csv_to_cmd.py
import pandas as pd
import json
import subprocess
csv_file = "sensor.csv"
model_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# wasabiからcsvファイルを取得
cmd = "aws s3 cp s3://nodeai-bucket/Node-AI-Berry-csv /home/ubuntu/work --endpoint-url=http://s3.ap-northeast-1-ntt.wasabisys.com --recursive"
proc = subprocess.run(cmd, shell=True)
# csvファイルの読み込み
df = pd.read_csv(csv_file)
body = ""
num_col = len(df.columns) # カラム数
win_size = len(df) # 窓幅
# 文字列がfloat()で変換できるときにTrueを返す関数
def is_num(s):
try:
float(s)
except ValueError:
return False
else:
return True
# csvファイルをbodyに含めるように変換
body += "{"
for i in range(num_col):
# csvカラム出力
body += '"{0}": ['.format(df.columns.values[i])
col_list = df[df.columns.values[i]].to_list()
for j in range(len(col_list)):
if is_num(col_list[j]):
body += str(col_list[j]) + ", "
else:
body += '"' + str(col_list[j]) + '", '
body = body[:-2]
body += "], "
body = body[:-2]
body += "}"
# コマンド定義
cmd = "curl -X 'POST' 'http://localhost:8001/api/v2/predict/{0}?attribution=false&tone=false' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{{\"data\": {1}}}'".format(
model_id, body
)
# コマンド実行
proc = subprocess.run(cmd, shell=True, capture_output=True, text=True)
stdout = proc.stdout
# 出力をjsonに変換
stdout_json = json.loads(stdout)
# datetime・predictionから[]を削除
datetime = str(stdout_json["result"]["index"]).replace("[", "").replace("]", "")
prediction = str(stdout_json["result"]["prediction"]).replace("[", "").replace("]", "")
# datetimeとpredictionを出力
print("datetime:{0}, prediction:{1}".format(datetime, prediction))
# ファイルに書き込む
f = open("prediction.txt", "a")
f.write("datetime:{0}, prediction:{1}\n".format(datetime, prediction))
f.close()
# wasabiに予測値テキストファイルを保存
cmd = "aws s3 cp /home/ubuntu/work s3://nodeai-bucket/Node-AI-Berry-txt --endpoint-url=http://s3.ap-northeast-1-ntt.wasabisys.com --exclude '*' --include 'prediction.txt' --recursive"
proc = subprocess.run(cmd, shell=True)
動作確認をする¶
上記で作成したスクリプト「csv_to_cmd.py」を実行します。Berryサーバーにて下記のコマンドを実行してください。
$ python3 csv_to_cmd.py
下記のコマンドを実行し、作業ディレクトリ下に予測値テキストファイル「prediction.txt」ファイルが生成されていることを確認してください。
$ ls
また、下記のコマンドを実行し、予測値テキストファイル「prediction.txt」に予測用データに対する予測値が出力されていることを確認してください。
$ cat prediction.txt
Wasabi ログインページ へアクセスし、予測値テキストファイルの配置先へ行き、「prediction.txt」がアップロードされていることを確認してください。
本構成ガイドでは結果として出力された予測値テキストファイルをWasabiに保存しています。これらに対してお客様の環境に合わせた可視化ツールを用いることで、より効果的に確認や評価が可能です。