2023.10.05
ChatGPTに金融データ分析をさせてみる
はじめに
生成AIの直近のトピックとしてCode Interpreterのようにクエリに応えるために、生成AIに何をすべきか考えさせてコードを実行して結果を得るというようなものが出てきています。
ChatGPTの持つ一般常識とデータから読み取れることをうまく組み合わせることで、データを分析させて結果を解釈させられるかを今回は検証してみたいと思います。
やってみたいこと
以下のような週次データの形式で、米国株式のセクターごとのリターンと長短の金利の週次変化をインプットして、いくつかの基本的な質問にうまく答えられるかどうかをみてみます。
-
もっとも相関が高いセクターのペアを教えて
-
長短金利の差と相関が高いセクターはどれ?
- なぜそのような相関が生じるの?
langchainのpandas dataframe agentを使うと、上記を簡単に確かめることができます。
環境のセットアップ
あらかじめ扱いやすい形でデータを整形して準備しておき、OpenAIのAPIキーを与えてlangchainのagentを作ります。
pandas dataframe agentが間接的に利用しているPython agentは、chatgptが生成した任意のコードをそのまま実行してしまうagentなので、下記のコードを試す際はGoogle Colabのように、毎回新しいインスタンスが生成されるサンドボックス環境で試すほうがよいでしょう。
from getpass import getpass openai_api_key = getpass('input api key: ') ! pip install openai langchain from langchain.agents import create_pandas_dataframe_agent from langchain.chat_models import ChatOpenAI from langchain.agents.agent_types import AgentType from langchain.llms import OpenAI import pandas as pd import numpy as np df_new = pd.read_csv("sector_ir_sp500_20230927.csv") df_new["Date"] = df_new["Date"].pipe(pd.to_datetime) df_new = df_new.set_index(["Date"]) agent = create_pandas_dataframe_agent(OpenAI(temperature=0, openai_api_key=openai_api_key), df_new, verbose=True)
検証
まずは正しくライブラリ・環境がセットアップできているか確認するために、「カラム数を教えて」という基本的な質問から試してみます。
この回答はチュートリアルなどにも類似実行例があるもので、特に問題なさそうです。
続いての質問は、「もっとも相関が高いセクターのペアを3つ答えて」です。
この質問に関しても相関行列を計算し、その中から相関が高いペアを抽出することができています。
同じような感じで「長短金利の差と相関が高いセクターは?」と尋ねてみます。
今回のデータだと答えは「金融セクター」でこれも正しく答えられています。
ではなぜそのような相関が生じるのかを聞いてみます。
さきほどの質問には正しく答えられていたのに、少し言い回しを変えるとエラーが頻発し、回答を生成することができませんでした。
他にも言い回しを変えて試してみましたが、データから読み取れない余計なことを言わないようになっているのか、常識とデータを組み合わせた回答は得られませんでした。
langchainのpandas agentで指定されているプロンプトは以下で確認できますが、それほど細かい指示を与えているわけではなさそうです。
https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/agents/agent_toolkits/pandas/prompt.py
他にもよくある分析で「主成分分析の結果を解釈して」というのをやってみましたが、これもコードの実行結果をそのまま返してくるだけになってしまいます。
複数セクターのリターンを並べたデータをPCAにかけると、第一成分はマーケットリターンに近いようなものになるはずですが、常識と照らし合わせてそのような回答を生成することはできないようです。
番外編: agentの挙動
pandas dataframe agentで質問を投げると、与えたdataframeには破壊的な変更が加えられます。
元のカラムは以下のようになっています。
カラムを追加します。
元のdataframeを確認すると、differenceカラムが追加されています。
まとめ
chatGPTにデータ分析のコードを生成させ、実際に金融データを分析させてみました。
適切な分析コードを生成して正しい結果を返してくれますが、一般常識・ドメイン知識とデータから読み取れることを組み合わせて、結果を解釈させるというところまでは行きませんでした。
プロンプトや各種パラメータの工夫をすれば、このようなこともできるのかもしれないですが、簡単にすぐできるというわけではなさそうです。
最後に
グループ研究開発本部 AI研究開発室では、データサイエンティスト/機械学習エンジニアを募集しています。ビッグデータの解析業務などAI研究開発室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。皆さんのご応募をお待ちしています。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD