File Icons
BLOG
ChatGPTを使って予測モデルを作成する(2): ランダムフォレストのコードを生成・実行してみる

目次

  1. イントロダクション
    1.1 はじめに
    1.2 今回の実験サマリ
  2. 事前準備
    2.1 ライブラリのインストールとOpenAI APIの設定
    2.2 データセットの準備
  3. データセットの詳細
  4. ランダムフォレストの予測モデルを作成してみる
  5. まとめ

1. イントロダクション

1.1 はじめに

前回のブログでは、LangChainからChatGPT APIを呼び出して、自然言語からデータ分析、予測モデルの作成を行えるかを試しました。前回は線形回帰のモデルを作成してみましたが、今回はランダムフォレストのモデルも同様に作成できるかを試してみます。

1.2 今回の実験サマリ

ランダムフォレストのコードの生成・実行にあたって、線形回帰の時と同様に、以下のようなプロンプトで指示を出してみました。

■python

text="""
生存したかどうかを、RandomForestで予測してください。
生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。

入力データセットはdfです。

データセットを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。
訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。
予測精度は、AUCを計算してください。
"""
agent.run(text)

その結果、以下のようなエラーが発生してモデルを作成することができませんでした。

'Agent stopped due to iteration limit or time limit.'

生成するコードが複雑なため、コードの実行・修正を内部で繰り返しているうちに、create_pandas_dataframe_agentのAPIの繰り返し実行回数の上限に達してしまったためのようです。

2. 事前準備

2.1 ライブラリのインストールとOpenAI APIの設定

まずは、LangChainでOpenAIのAPIを使用する手順に従って、langchainのインストール、OpenAIのAPIキーの発行と設定を行います。

※ 以前に上記の設定をしている場合、この手順はスキップして構いません。

2.2 データセットの準備

今回は分類モデルを作成するため、タイタニックデータセットを使用します。

3. データセットの詳細

このデータセットは、タイタニック号の乗客に関する情報を含んでいます。
データセットには、以下のカラムが含まれています。

Noカラム名説明
1PassengerId乗客のID
2Survived乗客が生存したかどうか(0 = 死亡, 1 = 生存)
3Pclass乗客のチケットクラス(1 = 1st(最上級)、2 = 2nd(中級)、3 = 3rd(下級))
4Name乗客の名前
5Sex乗客の性別
6Age乗客の年齢
7SibSp乗客がタイタニック号に同乗していた兄弟姉妹や配偶者の数
8Parch乗客がタイタニック号に同乗していた親や子供の数
9Ticketチケット番号
10Fare運賃
11Cabinキャビン番号
12Embarked乗船した港

具体的なデータセットの中身は以下のようになっています。

4. ランダムフォレストの予測モデルを作成してみる

■python

import os
import openai

# .envファイルからAPIキーを読み込む
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai.api_key = os.environ['OPENAI_API_KEY']

import pandas as pd
from langchain.chat_models import ChatOpenAI
from langchain.llms import OpenAI
from langchain.agents import create_pandas_dataframe_agent
from langchain.agents.agent_types import AgentType

from langchain.output_parsers import StructuredOutputParser, ResponseSchema

# データフレームを操作するエージェントの作成
agent = create_pandas_dataframe_agent(
    OpenAI(temperature=0, max_tokens=1000),
    df,
    verbose=True,
    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

# データの読み込み
df = pd.read_csv('../data/titanic.csv')
df.head()

さて、前回と同じように以下のコードを実行してみます。

■python

text="""
生存したかどうかを、RandomForestで予測してください。
生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。

入力データセットはdfです。

データセットを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。
訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。
予測精度は、AUCを計算してください。
"""
agent.run(text)

すると、以下のようなエラーが発生して実行が止まりました。

生成するコードが複雑なため、コードの実行・修正を内部で繰り返しているうちに、create_pandas_dataframe_agentのAPIの繰り返し実行回数の上限に達してしまったためのようです。

'Agent stopped due to iteration limit or time limit.'
スクリーンショット 2023-06-29 19.05.37.png (289.6 kB)

5. まとめ

ランダムフォレストのコードの生成・実行は、今回の方法では上手くいきませんでした。

生成するコードが複雑なため、コードの実行・修正を内部で繰り返しているうちに、create_pandas_dataframe_agentのAPIの繰り返し実行回数の上限に達してしまったためのようです。

今後は、プロンプトの記載方法を工夫することによって、モデルを作成できないかを試してみます。手順を明確に記載したり、具体的に書くなどの工夫をしてみたいと思います。

CONTACT
ご依頼やご相談、サービスについてのご質問やご要望がございましたら、お気軽にお問い合わせください。
送付いただいた内容を確認の上、担当者からご連絡させていただきます。
お問い合わせ