【Excelやっといて】ChatGPT の Code Interpreter が便利すぎて職がなくなりそう

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

職場の方が大炎上していてなかなか LLM を触れない楽介です。が、これだけは触れないわけにはいかないでしょう。

ChatGPT の期待の新機能、 Code Interpreter です。

Code Interpreter とは?

調べるのが面倒くさかったので、本人に直接聞いてみました(とかいうことができるのがツールとして本当に強い)。

もちろんです。ここでは、Pythonコードを入力し、その実行結果を得ることができます。具体的な使い方は以下の通りです:

  1. 基本的なコードの実行: たとえば、あなたが2つの数の合計を計算したいと思った場合、次のように入力できます:
css

python code

5 + 3

その後、私がそのコードを実行し、その結果を表示します。

  1. 変数の利用: あなたが作成した変数はこのセッション全体で利用可能です。たとえば、次のようにすることができます:
makefile
python code
x = 10
y = 20
x + y

このコードはxyという2つの変数を作成し、それらの合計を計算します。

  1. 関数の定義と利用: あなたは独自の関数を定義し、それをこのセッションで何度でも使用することができます。例えば:
css
python code

def add_numbers(a, b):
return a + b

これで、このセッションでadd_numbers関数が利用可能になります。以下のように使うことができます:

scss

python code

add_numbers(10, 20)

  1. エラーハンドリング: 何か間違ったことをした場合(例えば、未定義の変数を使用したり、存在しない関数を呼び出したりするなど)、エラーメッセージが表示されます。
  2. データの永続性: このセッションで作成したデータは一時的であり、セッションが終了すると消去されます。

なお、このコードインタプリタはインターネットアクセスを持っておらず、外部APIやウェブリクエストを行うことはできません。また、外部からデータをインポートすることはできますが、そのデータはユーザーによって提供されるか、または以前にセッションで作成されたものでなければなりません。

それぞれのプログラミング言語やライブラリには特有の使い方や機能があるため、具体的な質問や要求がある場合はお知らせください。

ということで、Python のコードを実行できるツールというのが Code Interpreter の核です。ですが、この説明だと Python プログラミングができないと使えない機能のように思ってしまいます。しかしその理解は間違っていて、実際には ChatGPT に Python の実行環境を与えているというのが正しいです。

また、ファイルのアップロード / ダウンロード も可能です。

つまり、

  1. ChatGPT に Python の実行環境というツールを与える(特別なプラグイン)
  2. ChatGPT とユーザーのやりとりに、ファイルのアップロード・ダウンロードという新しいコミュニケーション手段を設ける(もちろん画像も)
  3. (おそらくは)ChatGPT の裏の GPT-4 に、Python で課題解決するためのプロンプトが仕込まれている

と言えます。

通常のユーザー視点で言えば、ChatGPT では行えなかった数値計算の他、ExcelやBI, データベースを用いた繰り返し演算やグラフの作成が容易にできるようになりました。今まで Python を書いたり BI ツールを長い時間いじって苦労して出していたレポート群をまとめて出力することができます。

API を叩く側からすると、ファイルとPython Interpreterを上手いこと実行するエージェント系の実装です。

ChatGPT Code Interpreterを使ってみる

ChatGPT にサンプルデータセットを生成させて実験してみる

ChatGPT Code Interpreter ではデータサイエンスなどで広く使われるサンプルデータセットを使うことができます。いちいちダウンロードするのが面倒な場合、また、自分で分析したい欲求はなく試してみたい場合などに使うと便利です。

使用可能なデータセットは、

  1. Iris Dataset: アヤメの植物としての特徴を含む
  2. Boston Housing Dataset: ボストン市郊外の住宅価格とその他の特徴データを含む
  3. Wine Dataset: ワインの化学分析結果
  4. Diabetes dataset: 糖尿病患者の疾患進行度の予想するための情報を含む

この中で個人的に使いやすいのは、ボストンの住宅価格なのでこれを使ってみたいと思います(特別、科学的な知識は不要ですし、機械学習による予想というよりシンプルな分析のためです)。

ChatGPT に Boston Housing Dataset を用いて基本的な分析をさせてみる

Input
Boston Housing datasetを用いて、住宅価格の分布をグラフにしてください。
Output

以下のヒストグラムは、ボストンの住宅価格(単位は $1,000)の分布を示しています。価格は主に $20,000 から $25,000 の範囲に集中していますが、それ以上またはそれ以下の価格の家も存在しています。

この分布から、ボストンの住宅市場には中心(中央)値周辺にデータが集中していると言えます。しかし、高価格帯に向かうにつれて家の数は減少し、一部の非常に高価な家が存在することがわかります。これは、住宅価格が正規分布に従わず、右に歪んだ分布を示していることを示しています。

この情報は、ボストンの住宅市場についての一般的な理解を深めるのに役立ちます。たとえば、中心値周辺の家が市場の大部分を占めているため、これらの家の特性(例えば、部屋の数、立地、犯罪率など)を理解することは、市場全体を理解する上で非常に有用です。同様に、高価格帯の家が少ないことは、これらの家が特異な特性を持っている可能性があることを示しています。

生成されたコード

from sklearn.datasets import load_boston
import pandas as pd
import matplotlib.pyplot as plt

# Load Boston housing dataset
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)

# Add target variable (price) to the dataframe
df['PRICE'] = boston.target

# Plot histogram of the housing prices
plt.figure(figsize=(10, 6))
plt.hist(df['PRICE'], bins=30, color='blue', edgecolor='black')
plt.title('Distribution of Housing Prices')
plt.xlabel('Price (in $1000s)')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()

以下と言いつつ、画像が上に出ているところがご愛敬といったところですが、グラフだけではなく基本的な分析も実施されています。もっともこれは一般的なデータセットなので、出力の結果を「目」で分析しているのか、学習済みのテキストから引っ張り出しているのかはこれだけでは判断ができません(基本的には判断は人間がすべきでしょう)。

Input
価格とその他の要素の相関について調べてください
Output
以下は、各特徴量と住宅価格(PRICE)との相関係数を示したものです。相関係数は -1 から 1 までの値を取り、1 に近いほど強い正の相関を、-1 に近いほど強い負の相関を示します。0 は相関がないことを示します。

PRICE      1.000000
RM         0.695360
ZN         0.360445
B          0.333461
DIS        0.249929
CHAS       0.175260
AGE       -0.376955
RAD       -0.381626
CRIM      -0.388305
NOX       -0.427321
TAX       -0.468536
INDUS     -0.483725
PTRATIO   -0.507787
LSTAT     -0.737663

この結果から、以下のような観察が可能です:

  • RM(平均部屋数)は価格と最も強い正の相関があります(0.695360)。これは、部屋数が多いほど価格が高くなる傾向があることを示しています。
  • LSTAT(低所得者の割合)は価格と最も強い負の相関があります(-0.737663)。これは、低所得者の割合が高い地域ほど価格が低い傾向があることを示しています。
  • PTRATIO(生徒と教師の比率)も価格と負の相関があります(-0.507787)。これは、生徒と教師の比率が高い地域ほど価格が低い傾向があることを示しています。

これらの情報は、住宅価格に影響を与える可能性のある要素を理解する上で有用です。

Input
ヒートマップを作って下さい。
Output

以下のヒートマップは、ボストン住宅データセットの特徴量間の相関行列を表しています。色が暖かい(赤寄り)ほど相関が強く、色が冷たい(青寄り)ほど相関が弱いことを示しています。

このヒートマップから、特徴量間の相関を視覚的に理解することができます。たとえば、RAD(高速道路へのアクセスのしやすさ)とTAX(全価値に対する固定資産税率)は強い正の相関を持っていることがわかります。これは、高速道路へのアクセスが容易な地域では一般的に税率が高いことを示しています。

また、DIS(ボストンの5つの雇用センターまでの加重距離)とNOX(窒素酸化物の濃度)は強い負の相関を持っています。これは、雇用センターから遠い地域ほど窒素酸化物の濃度が低いことを示しています。

このような情報は、特徴量間の関連性を理解し、モデル構築時に多重共線性を避けるために役立ちます。

ChatGPT 自体がまたちょっと重い時期(新機能リリースなので当たり前ですが)なのでこのくらいなら Github Copilot などを使った方が早い気もしますが、手間としてはチャットで指示を出すだけでいいので圧倒的に楽です。

多分、実務で使おうとなると「データを持ってくる」方が面倒くさくなるでしょう。API を叩いて実装する人であれば、これらのデータをきちんと持ってくる仕組みを整える(なんなら自動実行してレポートの提出まで行う)ことまで手を出す必要がありそうです。

ChatGPT Code Interpreter にデータサイエンスの講義を行ってもらう

筆者はデータサイエンスについて、ちらっとかじった程度(古典的な統計+αくらい)なので、モダンな分析手法は詳しくありません(それでも一般的な中小企業診断士よりは詳しいと思いますが)。

いい機会なので、教えてもらいましょう。

Input
このデータセットを用いて、データサイエンスで学習できることはなんですか?
Output

ボストン住宅データセットは、データサイエンスの多くの基本的な概念を学ぶのに役立つクラシックなデータセットです。以下に、このデータセットで学べる主なトピックをいくつか示します:

  1. 探索的データ分析 (EDA): データの分布を視覚化したり、各特徴量の統計的な要約を計算したり、特徴量間の相関を調べたりすることで、データセットの全体像を把握する技術を学びます。
  2. 回帰分析: 住宅価格(目的変数)と他の特徴量(説明変数)との関係をモデリングするための手法を学びます。これには、線形回帰、リッジ回帰、Lasso回帰などの手法が含まれます。
  3. 特徴選択: 目的変数と最も強く関連する特徴量を選択する技術を学びます。これには、相関分析やリカーシブ特徴除去(RFE)などの手法があります。
  4. モデル評価と検証: 交差検証、ブートストラップ法などの手法を使用して、モデルの性能を評価し、モデルが新しいデータに対してどれだけうまく汎化できるかを評価する方法を学びます。
  5. 多重共線性: 特徴量間の強い相関がモデルのパフォーマンスにどのように影響するかを理解します。
  6. 倫理: データの収集と利用に関連する倫理的な問題(このデータセットの場合、特にB(アフリカ系アメリカ人の住民の割合)とLSTAT(低所得者の割合)の特徴量)について考える機会を提供します。

これらのトピックは、データサイエンスの基礎を理解するための重要なステップです。

探索的データ分析(EDA)について

Input
探索的データ分析の重要な技術で、このデータセットで理解が深まる方法を実践してください。
Output

 

まず、データセットの各特徴量について基本的な統計情報(平均、標準偏差、最小値、四分位数、最大値)を計算しました。これにより、各特徴量の分布や範囲、中央値などを一目で理解することができます。

また、データセットに欠損値がないことを確認しました。欠損値が存在する場合、それらを適切に処理するための手法(例えば、欠損値の補完や欠損値を持つ行の削除)を考える必要があります。

次に、住宅価格(PRICE)のボックスプロットを作成しました。これにより、価格の分布、中央値、四分位数、外れ値を視覚的に確認することができます。

さらに、平均部屋数(RM)と住宅価格(PRICE)の散布図を作成しました。これにより、これら二つの変数間の関係を視覚的に調べることができます。散布図から、RMPRICEの間には正の相関があることが見て取れます。

これらの手法は、データセットを初めて探索する際に役立つ基本的なテクニックです。データの性質を理解するための第一歩として、データの分布を視覚化し、基本的な統計情報を計算し、欠損値の有無を確認することは非常に重要です。

以下に、計算された統計情報と欠損値の確認結果を示します。

基本統計情報

        CRIM          ZN       INDUS  ...           B       LSTAT       PRICE
count  506.000000  506.000000  506.000000  ...  506.000000  506.000000  506.000000
mean     3.613524   11.363636   11.136779  ...  356.674032   12.653063   22.532806
std      8.601545   23.322453    6.860353  ...   91.294864    7.141062    9.197104
min      0.006320    0.000000    0.460000  ...    0.320000    1.730000    5.000000
25%      0.082045    0.000000    5.190000  ...  375.377500    6.950000   17.025000
50%      0.256510    0.000000    9.690000  ...  391.440000   11.360000   21.200000
75%      3.677083   12.500000   18.100000  ...  396.225000   16.955000   25.000000
max     88.976200  100.000000   27.740000  ...  396.900000   37.970000   50.000000

欠損値の確認

サンプルデータセットなのでゼロなのは確実なので省略

Input
他にもありますか?
Output

さらに以下の2つの探索的データ分析(EDA)技術を実施しました。

  1. ペアプロット: これは、複数の特徴量間のペアワイズな関係を一度に視覚化するための手法です。ここでは、価格(PRICE)、平均部屋数(RM)、低所得者の割合(LSTAT)、生徒と教師の比率(PTRATIO)の4つの特徴量についてペアプロットを作成しました。
  2. ヒストグラム: これは、各特徴量の分布を視覚化するための手法です。ここでは、すべての特徴量についてヒストグラムを作成しました。

これらの手法は、各特徴量がどのように分布しているか、特徴量間にどのような関係があるかを視覚的に理解するのに役立ちます。例えば、ペアプロットからは、RMPRICEの間に正の相関があり、LSTATPRICEの間には負の相関があることが見て取れます。これは、部屋数が多いほど住宅価格が高く、低所得者の割合が高い地域ほど住宅価格が低いことを示しています。

また、ヒストグラムからは、特徴量の分布や範囲、極端な値の有無などを確認することができます。これは、特徴量のスケーリングや正規化、外れ値の処理など、データの前処理において重要な視点となります。

基本的に価格が含まれている場合は、その分布とその他の要素との関連(相関)が重要視されるのは間違いないので、箱ひげ図・ヒストグラム(とペアプロット)で数値の分布を可視化し、散布図とペアプロットで各値間の相関を可視化しています。直感にもあまり反さないデータが出力されていることが分かります。

部屋を借りる側はこれで充分かもしれませんが、不動産会社や住宅情報サービスのセールスやマーケティング部門であれば、空き室との関連を分析したくなるかもしれませんね(このデータセットにそのような情報はないようです)。

とはいえ、考慮にいれなければいけないパラメーター数が多すぎます。ということで、特徴量選択をさせてみます。

Input
価格に対する特徴選択を行うステップを示してください(実行時間が長くなりエラー)。

示された手順を実行してください。

Output

申し訳ありませんが、コードの実行状態がリセットされ、必要なライブラリやデータの読み込みが再度必要となりました。以下の手順でデータを再度読み込み、特徴選択を行います。

  1. データの読み込み: load_boston関数を使用してボストン住宅データセットを読み込みます。そして、このデータをpandasのデータフレームに変換し、ターゲット変数(PRICE)をデータフレームに追加します。
  2. 特徴量とターゲットの分離: データフレームから特徴量(説明変数)とターゲット(目的変数、ここでは住宅価格)を分離します。
  3. 特徴選択の実行: SelectKBestクラスとf_regressionスコア関数を使用して、各特徴量の重要度を評価し、最もスコアの高いk個(ここでは5個)の特徴量を選択します。
  4. 最良の特徴の取得: get_supportメソッドを使用して選択された特徴量のインデックスを取得し、それを用いて特徴量名を取得します。

これらの手順を再度実行してみます。

特徴選択を行った結果、住宅価格と最も強く関連していると判断された5つの特徴量は以下のとおりです:
  • INDUS: 非小売業エーカーあたりの割合
  • RM: 1住戸あたりの平均部屋数
  • TAX: 全価値に対する固定資産税率
  • PTRATIO: 教師あたりの生徒数(町全体)
  • LSTAT: 低所得者の割合

これらの特徴量は、住宅価格の予測モデルを作成する際に重要な役割を果たす可能性があります。特にRM(平均部屋数)とLSTAT(低所得者の割合)は以前の相関分析でも強い関連性が示されており、これらの特徴が選択されたことは合理的です。

この結果は、データの前処理や特徴工程のステップで特に重要となります。たとえば、これらの特徴量を中心にデータのクレンジングやスケーリングを行ったり、これらの特徴量から新たな特徴量を生成する特徴工程を行ったりすることが考えられます。また、予測モデルの訓練や評価でも、これらの特徴量を中心に活用することが可能です。

Input
住宅価格と、選択された特徴量だけでペアプロットを実行してください。
Output

申し訳ありませんが、コードの実行状態がリセットされたようです。再度、必要なライブラリをインポートし、データセットを読み込んでから、ペアプロットを作成します。

以下の手順を実行します:

  1. データの読み込み: load_boston関数を使用してボストン住宅データセットを読み込みます。そして、このデータをpandasのデータフレームに変換し、ターゲット変数(PRICE)をデータフレームに追加します。
  2. 特徴量とターゲットの分離: データフレームから特徴量(説明変数)とターゲット(目的変数、ここでは住宅価格)を分離します。
  3. 特徴選択の実行: SelectKBestクラスとf_regressionスコア関数を使用して、各特徴量の重要度を評価し、最もスコアの高いk個(ここでは5個)の特徴量を選択します。
  4. 最良の特徴とターゲットによるペアプロットの作成: 選択された特徴量とターゲットを含むペアプロットを作成します。これにより、選択された特徴量とターゲット間の関係を一度に視覚的に確認することができます。

これらの手順を再度実行してみます。

ご指定のペアプロットを作成しましたが、plt.show()の実行時にpltが未定義であるというエラーが発生しました。matplotlib.pyplotライブラリからpltを再度インポートして、ペアプロットを表示します。こちらがそのグラフです:

上記のペアプロットは、特徴選択を通じて選ばれた最良の特徴量と、ターゲットである住宅価格との間の関係を示しています。それぞれのサブプロットは、対応する特徴量と住宅価格との間の関係を表しています。

グラフから、選ばれた特徴量が住宅価格とどのように関連しているかを視覚的に理解することができます。このような視覚化は、特徴量がターゲットにどの程度影響を与えるかを理解する上で非常に有用です。それぞれの特徴量が住宅価格に与える影響を理解することで、より効果的な予測モデルを構築するための洞察を得ることができます。

みんなが使い始めたのか、実行状態が失われることが多くなってきましたが、逆に特徴量選択~プロットまで一括で実行してくれることが分かりました。ここまでくると、統計に関する基本的な知識と活用方法さえ分かっていれば、とても素早く視覚化まで行えますね。

Code Interpreter は誰を殺すか?

ChatGPT と同様に、かなりの知的労働者へのインパクトがありそうです。とはいえ、これがすなわちデータサイエンティストを不要にするかというと答えはノーでしょう。

ChatGPT や Github Copilot がただコードを書けるだけの人を淘汰しつつあるように、「ただデータを可視化できる人」「ただモデルを作成できる人」もちろん「ただ表計算ソフトや BI ツールをいじれる人」を淘汰していくと思います。

一方で、「適切な判断」「適切な指示」ができる人はますます重要になってくるでしょう。「ただ~できる人」が AI に居場所を追われるとは思いますが、それは追い落とされるというよりはこれらの上流工程を担う人材への変化を促す流れになるでしょう。

現在では、まだまだデータサイエンティストを雇っている会社は多くないです。それはデータサイエンティストの数が絶対的に不足しており、世の中に存在する需要に行き渡っていないからです。しかし、AI に任せられる仕事が増えれば、その労働力の不足を補えるので退屈な仕事から開放されるために幅広い活用になるでしょう。

しかも、プログラマーと違い、データサイエンスの分野は機械学習から深層学習につながる隣接分野です。そのため、現状の LLM を活用して仕事を行うことに向いていると考えられます。

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

最新の記事