目次
- イントロダクション
1.1 ブログの目的と内容
1.2 ChatGPTとLangChainの概要 - 必要なツールとライブラリ
2.1 ライブラリのインストールとOpenAI APIの設定
2.2 データセットの準備 - データセットの詳細
- Langchainからデータフレームを操作する
4.1 ライブラリの読み込みとAPIの設定
4.2 データフレームを操作する
4.3 データを可視化する
4.4 ChatGPTを用いた予測モデルの作成 - まとめ
5.1 まとめ
5.2 OpenAIとChatOpenAIのどちらを使うか - 参考文献
1. イントロダクション
1.1 ブログの目的と内容
LangChainからChatGPT APIを呼び出して、自然言語からデータ分析、予測モデルの作成を行えるかを試します。
今回は例として、1990年のカリフォルニア州の住宅価格のデータセットであるCalifornia Housing Pricesデータセットを使用します。このデータセットのデータ単位は地区であり、各データは地区の住宅価格や住宅の特徴、人口統計情報を含んでいます。
このデータセットに含まれる住宅価格を、住宅の特徴、人口統計情報から予測するモデルを作成することを目指します。住宅価格を表す目的変数は「median_house_value」です。これは、各地区の住宅価格の中央値を表す変数です。
予測モデルとして、線形重回帰モデルを指定します。
1.2 ChatGPTとLangChainの概要
ChatGPTはOpenAIによって開発された大規模言語モデル(LLM)です。
ChatGPTは質問の回答、文章の作成、コードの作成など様々な形式のテキスト生成に対応しています。ChatGPTを使うことで、Pythonコードも作成することができます。
ChatGPT APIをPythonで扱うためのフレームワークにLangChainがあります。LangChainには、Pythonコードの生成と実行する機能があります。LangChainを使うことで、自然言語からPythonを生成・実行し、その結果を得ることができます。
2. 必要なツールとライブラリ
2.1 ライブラリのインストールとOpenAI APIの設定
まずは、必要なライブラリのインストール、OpenAI APIの設定を行います。
OpenAI APIの設定方法は、LangChainでOpenAIのAPIを使えるようにするを参考にしてください。
2.2 データセットの準備
California Housing Pricesデータセットを使用します。データセットは、こちらからダウンロードすることができます。
3. データセットの詳細
今回使用するCalifornia Housing Pricesデータセットは、1990年のカリフォルニア州の住宅価格を中心に集められたデータです。各データは、地区ごとの集計結果を示しており、それぞれの地区は、人口が600~3,000人の範囲で、各地区は一意な緯度と経度を持っています。データセットは、以下のカラムを含んでいます。
No | カラム名 | 説明 |
---|---|---|
1 | longitude | 住宅ブロックの緯度 |
2 | latitude | 住宅ブロックの経度 |
3 | housing_median_age | 住宅ブロック内の住宅の中央値年齢 |
4 | total_rooms | 住宅ブロック内の部屋数の合計 |
5 | total_bedrooms | 住宅ブロック内のベッドルーム数の合計 |
6 | population | 住宅ブロック内の人口 |
7 | households | 住宅ブロック内の世帯数 |
8 | median_income | 世帯の中央値収入 |
9 | median_house_value | 住宅価格の中央値 (これが予測対象の目的変数となります) |
10 | ocean_proximity | 住宅ブロックが海にどれくらい近いか(例:'<1H OCEAN’, ‘INLAND’, ‘ISLAND’, ‘NEAR BAY’, ‘NEAR OCEAN’) |
4. Langchainからデータフレームを操作する
4.1 ライブラリの読み込みとAPIの設定
はじめに必要なライブラリの読み込みと、APIを設定します。
■python
import os import openai import pandas as pd from langchain.llms import OpenAI from langchain.agents import create_pandas_dataframe_agent from langchain.agents.agent_types import AgentType # .envファイルからAPIキーを読み込む from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) openai.api_key = os.environ['OPENAI_API_KEY']
まずは使用するデータを読み込みます。
■python
# データの読み込み df = pd.read_csv('../data/housing.csv') df.head()
続いて、データフレームを操作するエージェントの作成します。langchainのcreate_pandas_dataframe_agentを使用することで、データフレームを操作することができます。
■python
# データフレームを操作するエージェントの作成 agent = create_pandas_dataframe_agent( OpenAI(temperature=0, max_tokens=1000), df, verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, )
4.2 データフレームを操作する
日本語で質問をすると、データを集計して結果を返してくれます。
■python
agent.run("データ数はいくつありますか?")
■python
agent.run("データの欠損値を確認してください。")
4.3 データを可視化する
create_pandas_dataframe_agentを使用すると、データを可視化することもできます。
■python
agent.run("median_house_valueの分布を箱ひげ図で描いてください。")
ペアプロットも可視化することができます。
■python
agent.run("各変数同士の関係をペアプロットで描いてください。")
4.4 ChatGPTを用いた予測モデルの作成
最後に予測モデルを作成してみます。
■python
text=""" 住宅価格を線形回帰で予測してください。 入力データセットはdfです。 変数median_house_valueが目的変数です。 oceand_proximityとtotal_bedrooms変数は、説明変数から除外してください。 データセットを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。 訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。 予測精度は、RMSEを計算してください。 """ agent.run(text)
実際に線形重回帰モデルを使用した予測モデルを学習し、そのモデルを使って予測精度を計算することができました。ここでは、RMSE=68504という予測精度を実際に計算して返してくれています。
5. まとめ
5.1 まとめ
ここまでで、LangChainからChatGPT APIを呼び出して、自然言語からデータ分析、予測モデルの作成を行えるかを試すことができました。今回は、Pythonのコードを実行して動かしてみるところまで試してみました。
今後は、ChatGPTを使うだけで、予測精度をどこまで上げることができるかを試してみたいと思います。
5.2 OpenAIとChatOpenAIのどちらを使うか
公式リファレンスでは、llmにOpenAIを使用する方法と、ChatOpenAIを使用する方法の2通りが存在しています。現時点では、予測モデルを作成する目的ではOpenAIを使用する方法を使うほうが良いと考えられます。
■python
# llmにOpenAIを使用する方法 agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True) # llmにChatOpenAIを使用する方法 agent = create_pandas_dataframe_agent( ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613"), df, verbose=True, agent_type=AgentType.OPENAI_FUNCTIONS, )
ChatOpenAIを使用して予測モデルを作成しようとした場合、以下のようなエラーが発生するためです。(エラーは発生するものの、Pythonの実行はできます。)そのため予測モデルを作ろうとする場合にはOpenAIを使うほうが良いと思います。
OutputParserException: Could not parse LLM output: `The RMSE is the evaluation metric for the linear regression model. The final answer is 69329.02886260756.`