File Icons
BLOG
ChatGPTを使って予測モデルを作成する(1): 線形重回帰モデルを作成する

目次

  1. イントロダクション
    1.1 ブログの目的と内容
    1.2 ChatGPTとLangChainの概要
  2. 必要なツールとライブラリ
    2.1 ライブラリのインストールとOpenAI APIの設定
    2.2 データセットの準備
  3. データセットの詳細
  4. Langchainからデータフレームを操作する
    4.1 ライブラリの読み込みとAPIの設定
    4.2 データフレームを操作する
    4.3 データを可視化する
    4.4 ChatGPTを用いた予測モデルの作成
  5. まとめ
    5.1 まとめ
    5.2 OpenAIとChatOpenAIのどちらを使うか
  6. 参考文献

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カラム名説明
1longitude住宅ブロックの緯度
2latitude住宅ブロックの経度
3housing_median_age住宅ブロック内の住宅の中央値年齢
4total_rooms住宅ブロック内の部屋数の合計
5total_bedrooms住宅ブロック内のベッドルーム数の合計
6population住宅ブロック内の人口
7households住宅ブロック内の世帯数
8median_income世帯の中央値収入
9median_house_value住宅価格の中央値 (これが予測対象の目的変数となります)
10ocean_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()
スクリーンショット 2023-06-27 18.06.58.png (67.2 kB)

続いて、データフレームを操作するエージェントの作成します。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("データ数はいくつありますか?")
スクリーンショット 2023-06-27 18.11.04.png (61.2 kB)

■python

agent.run("データの欠損値を確認してください。")
スクリーンショット 2023-06-27 18.11.25.png (133.1 kB)

4.3 データを可視化する

create_pandas_dataframe_agentを使用すると、データを可視化することもできます。

■python

agent.run("median_house_valueの分布を箱ひげ図で描いてください。")
スクリーンショット 2023-06-27 18.13.00.png (139.2 kB)

ペアプロットも可視化することができます。

■python

agent.run("各変数同士の関係をペアプロットで描いてください。")
スクリーンショット 2023-06-27 18.14.14.png (557.2 kB)

4.4 ChatGPTを用いた予測モデルの作成

最後に予測モデルを作成してみます。

■python

text="""
住宅価格を線形回帰で予測してください。

入力データセットはdfです。
変数median_house_valueが目的変数です。

oceand_proximityとtotal_bedrooms変数は、説明変数から除外してください。

データセットを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。
訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。
予測精度は、RMSEを計算してください。
"""
agent.run(text)
スクリーンショット 2023-06-27 18.27.00.png (80.4 kB)

実際に線形重回帰モデルを使用した予測モデルを学習し、そのモデルを使って予測精度を計算することができました。ここでは、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.`

6. 参考文献

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