データサイエンス

PythonからForecastFlowで訓練と推論を行う方法

この度、PythonからForecastFlow訓練を行う機能を追加しました。
この記事では、訓練推論をPythonから行う方法について紹介します。

インストール

pip install forecastflowでインストールします。
以下はforecastflow==4.2.3を使用して執筆しています。

アカウント認証とプロジェクトの指定

ForecastFlowを使用するためには、訓練可能なアカウントが必要です。
アカウント情報を使用して認証を行います。

from forecastflow import User
email = 'メールアドレス'
password = 'パスワード'
user = User(email, password)

プロジェクトの指定

訓練を行うプロジェクトのIDを指定します。
存在しない場合はWeb上でプロジェクトを作成してください。

project_id = '訓練を行うプロジェクトのID'
project = user.get_project(project_id)

プロジェクトIDが不明な場合

プロジェクト画面のURLは以下の形式になっているため、URLからIDを確認します。
https://forecastflow.org/project/{プロジェクトID}

データの用意

訓練にはForecastFlow上に訓練用のデータが必要です。
データの指定方法について説明します。

Pythonからデータのアップロードを行う場合

Pythonからはpandas.DataFrameをアップロードすることができます。

import pandas as pd
train_df = pd.read_csv('train.csv', dtype=object)
train_data = project.create_data_source(
data=train_df,
name='train_data.csv',
label=DataSourceLabel.TRAIN,
description='data source for training'
)

既にForecastFlow上に存在するデータを使用する場合

データのIDを直接指定することで、ForecastFlow上のデータを訓練に使用できます。

train_data = project.get_data_source('訓練データのID')

モデルを訓練する

訓練設定を作成します。
訓練するモデルに合わせて設定を作ります。

  • 分類モデルを訓練する場合
    • ClassifierTrainingSettingsClassificationMetricsを使用
  • 回帰モデルを訓練する場合
    • RegressorTrainingSettingsRegressionMetricsを使用
from forecastflow.training import ClassifierTrainingSettings, RegressorTrainingSettings
from forecastflow.enums import ClassificationMetrics, RegressionMetrics
### 分類モデルの場合 ###
classifier_settings = ClassifierTrainingSettings(
target='col5',    # 目的変数の列の名前
metric=ClassificationMetrics.RECALL,    # パラメータ探索時の指標
primary_id='ids',    # 主IDの列の名前
secondary_ids=['col4', 'col6'],    # 副IDの列の名前
feature_excludes=['col1', 'col2'],    # 訓練時に除外する列の名前
random_state=777    # 乱数のシード値
)

作成した訓練設定をもとに訓練を行います。
テストデータの指定は以下のいずれかで行います。

  • データを分割して訓練データとテストデータに分ける
  • テストデータを別で用意する
classifier_model = train_data.create_model(
train_settings=classifier_settings,    # 作成した設定オブジェクト
name='new model',    # モデルの名前
test_frac=0.28,    # テストデータとして使用する割合
test_data_source=None,    # 別に用意したテストデータ
description='trained model'    # モデルの説明
)

訓練したモデルで推論を行う

モデルにデータを与えて推論を行います。

prediction = classifier_model.create_prediction(
data_source=pred_data,    # 推論を行うためのデータ
name='new prediction'    # 推論の名前
)

推論結果を取得する

DataFrameとして推論結果を取得できます。

predicted_df = prediction.get_result()

終わりに

この記事ではPythonからForecastFlowによる訓練と推論を行う方法を紹介しました。
Pythonで完結して処理を行うことができます。
是非ご利用ください。

仲田勇太