分析プロセスを1つずつ実行する

はじめに

ここでは Jupyter Notebookを用いて対話的に、分析プロセス(分析の処理手順)の設計と分析モデル作成を行います。 分析プロセスの設計と分析モデル作成には、SAMPO API(異種混合学習技術を用いた分析ソフトウェア SAMPO/FAB の Python API)を使用します。 分析モデルを作成する分析プロセスを1つずつ実行する例で説明します。

データを準備する

  1. ユーザがアクセス可能なディレクトリにsampo-getting_started.zipを格納します。

  2. 格納したファイルを解凍します。

    $ 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]:
process name version started at running time status
0 fabhmerg_learn 874f9206-cf28-4ad5-92bd-3b8b3b92b00a 2019-02-01 15:56:49.486877 00:00:01.162330 Succeeded
1 fabhmerg_predict c8d4f44b-95bb-4284-8ace-407317dfd655 2019-02-01 15:56:50.680447 00:00:00.592512 Succeeded

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])
RMSE: 1942.7856129287682
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]:
Text(0, 0.5, 'Predict price')