ChatGPTの新機能「Code Interpreter」を使ってデータ分析コンペに挑戦してみた結果が凄い…!
先日リリースされた、ChatGPTの新機能「Code Interpreter」を使って、データ分析コンペに挑戦してみたところ、想像以上の結果を出してくれたので共有します。
今回は人間は簡単な指示を出すだけで、ほとんど全てをChatGPTに任せる方針で行なっています。
「シニアデータサイエンティストが行うより精度がよくまりました!!」という華やかな結果にはなりませんでしたが、予想以上の結果にはなったのでぜひ最後まで読んでみてください!!
Code Interpreterとは
「Code interpreter(コードインタープリター)」とは、ChatGPTが提供する公式プラグインの1つで、このプラグインを利用することで、ChatGPT上でPythonを使ったコードの実行や、ファイルのアップロード・ダウンロードができるようになります。
ファイルのアップロード機能を使うことで、チャット上にデータをアップロードし、そのデータに対してコードを実行することができるようになります。
また、作業の結果をcsvなどでダウンロードすることが可能です。
つまり、Code interpreterのプラグインを使うことで、ChatGPT上でPythonコードを実行したり、ファイルのやり取りを行うことができるようになり、今まで以上にChatGPTが便利になるということです。
挑戦したコンペ
今回は、この「Code Interpreter」を使って『Probspaceの給与推定コンペ』に取り組んでみました。
コンペ自体ははすでに終了していますが、勤続年数や最終学歴などから給与を指定するというシンプルな問題で、データもわかりやすいので今回はこのコンペを選びました。
以下がコンペの概要になります。
このデータ分析コンペティションは、ある会社の社員の給与を予測するという課題に取り組むものです。具体的には、人事担当者が給与規定と一部の社員の給与情報を紛失したという設定で、与えられた社員の情報を基に失われた給与情報を予測することが求められます。
データは訓練データとテストデータの2つに分けられています。訓練データには社員の情報とその社員の給与が含まれており、これを使って機械学習モデルを訓練します。一方、テストデータには社員の情報は含まれていますが給与は含まれておらず、訓練したモデルを使ってこれらの社員の給与を予測します。
社員の情報は以下のような項目から成り立っています:
- 役職(役職なし、主任、係長、課長、部長)
- 年齢
- 勤務地
- 性別(男性、女性)
- 配偶者の有無
- 子供の人数
- 最終学歴(高校、短大専門学校、大学、修士、博士)
- 勤続年数
- 一週間あたりの勉強時間
- 通勤時間
- 一ヶ月あたりの残業時間
これらの情報を元に、各社員の給与を予測することがこのコンペティションの目標です。給与は実数値で予測することが求められています。
引用:https://comp.probspace.com/competitions/salary-prediction
データ分析コンペに挑むにあたって意識したこと
「Code Interpreterに全て任せたらどれくらいの成果を出すか?」を検証したかったため、人間側からは具体的な分析の方針やアドバイスは出さないようにしました。
また、Code Interpreterはメモリが貧弱なので、ディープラーニングやxgboostといったモデルの仕様やハイパラ調整とかは行いませんでした。
結果
最終結果として、全体の順位は242位中95位と上位40%に食い込む結果となりました。
全参加者がデータ分析の専門家だとは考えにくいですが、ほぼ全てを「Code Interpreter」に任せて平均より上の順位の精度を出せたのは、結果としては十分なパフォーマンスだと言えます。
データ分析の専門家でない人でも、「Code Interpreter」を使えば、一行のコードも書かずに平均以上の精度を出せると考えると、そのすごさが理解できるでしょう。
ただ、GPT-4やメモリ不足の影響もあり、ここからさらに精度を大きく向上させるのはなかなか難しいなとも思いました。
また、ChatGPTはデータ分析や特徴量エンジニアリングの専門ツールではないので、一般的な分析や特徴量エンジニアリングはできますが、データサイエンティストを超えるようなアウトプットを出すことは難しいとも感じました。
なので、現時点ではChatGPT「Code Interpreter」はータサイエンティストの仕事を奪うレベルではないですが、活用方法によってはデータ分析の仕事を効率化することはできるという感じです!
データ分析
ここからは、ChatGPTがどのように予測モデルを作成していったかの詳細をご紹介します。
以下に実際のやり取りのリンクも貼っておくので、興味がある人はこちらもぜひご覧ください!
基礎分析
まず最初にこのコンペの概要やルールなどを説明して、データをzip形式でアップロードしました。
データをアップロードすると、特別な指示を出さなくてもデータの基本的な統計量を出してくれました。
さらには、カテゴリデータをone-hotエンコーディングしてくれたり、目的変数である給与と各変数の相関係数も自動で調べてくれました。
「給与推定予測モデルを作る」という目標に対して、必要な基礎分析や前処理を自動で行ってくれている様子が伺えます
データをアップロードして目的を伝えただけで、サクッと必要な基礎分析をやってくれるのは凄いですね
データの可視化
特別な指示をすることなく、基礎分析の流れのままに特徴量の可視化も行ってくれました。
この作業をデータ分析の専門でない人がExcelを使ってやろうとすると結構な時間がかかるで、この可視化の作業だけでもデータ分析の専門家ではない人にとって「Code Interpreter」がいかに分析には役立つかが分かりますね!
さらには、給与(目的変数)と各変数の相関についても可視化してくれました。
これにより、各特性がどのように給与と関連しているかを視覚的に理解することができます。例えば、役職のレベルが上がると給与も上がることがわかります。これは、役職と給与の間に正の相関があるという我々の初期の分析結果を裏付けています。
最後の一文では、最初に行った相関分析と今回のプロットの結果が一致していることを指摘しており、まるでデータ分析の専門家が分析を進めているかのような示唆を出してくれているのも遅驚きです。
特徴量エンジニアリング
特徴量エンジニアリングについては、ChatGPTがデータの特徴からどのような特徴量を作成したら良いかを考えてくれています。
一般的に、年齢が高く、サービス年数が長い社員はより高い給与を得ている可能性があります。
注目すべきはこの一文です。
これまでの分析ツールとChatGPTの新機能「Code Interpreter」の大きな違いは、一般論から考えてどういったアプローチを取れば良いかを考えられることです。
従来のツールでは、「年齢が高く、サービス年数が長い社員はより高い給与を得ている」という情報が事前に与えられていなければ、このような推測を立てることは困難です。
しかし、ChatGPTは大量のデータを学習しており、一般的な知識や過去の事例をもとに、何を分析すれば良いかを考え出すことができます。
さらに、ChatGPTは予測モデルの作成だけでなく、一般論や過去の事例を基にしたデータ分析における考察や示唆の提供も可能なので、ChatGPTが今後のデータ分析の鍵となることは確実と言えます。
エラーは何回か出しながらも、自ら原因を特定して修正しながら特徴量エンジニアリングを完了させました。
予測モデルの作成
ここから、予測モデルの作成をしていきます。
ここでも、何度かのエラーが発生しましたが、それらを自ら修正しながら予測モデルを構築し、テストデータを用いた予測結果を出力してくれました。
その結果をProbspaceのサイトで提出し、全体の中でどれくらいのパフォーマンスなのかを確認しました。
その結果、MAE(平均絶対誤差)は「23.840」で、順位は242位中103位でした。(データを一度でも提出した人を対象として順位付け)
242人の全員がデータ分析の専門家とは考えにくいですが、それでもほぼ全てを「Code Interpreter」にお任せして、半分より上の精度を出せるのは凄いですね!!!
データ分析の専門家でない人でも、「Code Interpreter」を使えば、一行のコードも書かずに平均以上の精度を出せると考えると、そのすごさが理解できるでしょう。
ただし、一方で、1位のMAEが「19.758」だったことを考慮すると、上位を目指す場合にはさらなる改善の余地が存在します。
精度の改善
せっかくなので、もう少し精度改善をしてみます。
まず、精度を向上させるためにどのようなアプローチが有効かをChatGPTに尋ねました。それに対し、一般的に用いられるさまざまなアプローチを提案してくれました。
各アプローチの精度向上の可能性を10段階評価してもらったことで、次に何を行うべきかも簡単に決定することができました。
今回は計算リソースも限られているので、特徴量重要度を元に特徴量エンジニアリングをしてもらうことにしました。
その結果、新たに行った特徴量エンジニアリングにより精度が僅かに向上し、MAEは「23.770」に改善し、順位も「95位/242位」と上位40%に食い込む結果となりました。
ChatGPTが自ら提案し作成した特徴量エンジニアリングによってしっかりと精度を向上できたのは素晴らしいですね!
分析レポートの出力
最後にこれまでの分析結果や予測モデルについてのレポートをまとめてもらいました。
ただ単に結果だけ書くのではなく考察やネクストアクションまで書かれているので、このままでも十分使えるくらいに使えるくらいにまとめてくれていますね。
指示を出せば、このレポートをドキュメントにして出力することもできます。
まとめ
ChatGPTプラグイン「Code Interpreter」を使うことにより、簡単な指示だけで1行のコードも書くことなくほぼ全自動でデータ分析コンペにおいて242位中95位で上位40%に食い込む結果となりました。
まだデータサイエンティストの仕事が奪われるとは思いませんが、良い感じに活用することでデータ分析の仕事をかなり効率化することはできそうですね!
「Code Interpreter」を使うことで生産性が大きく変わることは間違いないので、今のうちから「Code Interpreter」をしっかりと使いこなすことが重要になってきます。
そのためには、以下のページもぜひ参考にしてみてください
またプログラミングの生産性を上げる方法は以下で紹介しているので、ぜひこちらも参考にしてみてください。
それでは!