分析プロセスを1つずつ実行する¶
はじめに¶
ここでは Jupyter Notebookを用いて対話的に、分析プロセス(分析の処理手順)の設計と分析モデル作成を行います。 分析プロセスの設計と分析モデル作成には、SAMPO API(異種混合学習技術を用いた分析ソフトウェア SAMPO/FAB の Python API)を使用します。 分析モデルを作成する分析プロセスを1つずつ実行する例で説明します。
データを準備する¶
ユーザがアクセス可能なディレクトリにsampo-getting_started.zipを格納します。
格納したファイルを解凍します。
$ unzip sampo-getting_started.zip -d ~/work
Jupyter Notebook上で分析する¶
Jupyter Notebook上で、 [work/examples] ディレクトリに移動してください。
Notebookを作成するため、Jupyter Notebook上で [New] ボタンを押下し、 [Python 3] を選択します。
1. 分析プロセス設計¶
分析プロセス設計として、SPD (プロセス記述: 分析プロセスの設計情報) とSRC (プロセス実行設定: 分析プロセスの実行指示情報) を作成します。
In [1]:
import logging
from sampo.api import sampo_logging, gen_spd, gen_src, process_runner
sampo_logging.configure(logging.INFO, filename='./getting_started-process_run.log')
spd = gen_spd(file='fabhmerg.spd')
learn_src = gen_src(file='fabhmerg_learn.src')
predict_src = gen_src(file='fabhmerg_predict.src')
2. 分析モデル作成¶
分析モデルを得るために、分析プロセスの実行結果を格納するプロセスストア(SAMPO/FABで分析プロセスを実行した結果を格納する場所)を作成し、分析プロセスを実行します。
In [2]:
from sampo.api import process_runner, process_store
pstore_url = './pstore'
process_store.create(pstore_url)
process_runner.run(src=learn_src, spd=spd, pstore_url=pstore_url) # 学習用の分析プロセスの実行
process_runner.run(src=predict_src, pstore_url=pstore_url) # 予測用の分析プロセスの実行
process_store.list_process_metadata(pstore_url)
Out[2]:
3. 結果評価¶
分析モデルで予測した結果のRMSE(Root Mean Squared Error)を確認し、続けて分析モデルを可視化して確認します。
- 分析モデルの門木(予測式の使用条件を木構造で表したもの)を確認します。
- ステムプロットを用い、有効な属性を確認します。
- 散布図を用いて、実績値と予測値を比較します。
In [3]:
from sampo.api import process_store
with process_store.open_process(pstore_url, 'fabhmerg_predict') as prl:
df = prl.load_comp_output('rg') # used in next step
model_params = prl.load_model('rg') # used in next step
evaluation = prl.load_comp_output_evaluation('rg')
print('RMSE:', evaluation['root_mean_squared_error'][0])
In [4]:
%matplotlib inline
import matplotlib.pyplot as plt
from IPython.display import Image, display
# Gate tree
from sampovis.api import fabhme_vis
fabhme_vis.save_gate_tree(pstore_url, 'fabhmerg_predict', 'rg_predict')
display(Image(filename='rg_predict/fabhmerg_predict_rg_fabhme_gate_tree.png'))
# Stemplot
formula_df = model_params['prediction_formulas']
formula_df = formula_df[(formula_df.sum(axis=1) != 0)]
formula_df.plot(kind='barh', figsize=(8,4), stacked=True)
# Scatter plot
_, ax = plt.subplots(figsize=(4, 4))
ax.scatter(x=df[['price']], y=df[['rg_predict']])
ax.plot(range(35000), 'r--')
ax.set_xlim(0, 35000)
ax.set_ylim(0, 35000)
ax.set_xlabel('Actual price')
ax.set_ylabel('Predict price')
Out[4]: