見出し画像

Claude 3.5 Sonnetと統計・機械学習(R/Python)

生成AIとコード作成、特にPythonは相性がいいと言われ続けて久しい。私も過去、ビジネス統計ではCopilotを使ってRstadio上で動くRのスクリプトを書いてもらったり、結果から見るべき注意点をアドバイスをもらったりした。 そんな中で出てきたのがClaude 3.5 Sonnet(有料アカウントで使用可能)である。
今回は、Claude3.5 Sonnetを用いて、Rstadioで重回帰分析を行うスクリプトの作成、エクセルデータの編集をGoogle Colab上で動くPythonで実施するためのコード、最後は機械学習(クラスタリング分析)をGoogle Colabで行うためのコードを書いてもらった例を紹介する。


コードの生成の在り方が素人にありがたいClaude 3.5 Sonnet

 2024年6月21日にリリースされたClaude 3.5 Sonnetは個人的な体感速度で結果の導出スピードが速い。そして、コードはコードとして、その解説は解説として出してくれるありがたい機能がある。
 何がいいのかわからない皆様にお伝えするのは、ワンクリックコピーでそのままPython環境(Google Colabを利用)やR環境(Rstadioを利用)に張り付けて動かすということができることが良い、ということ。さらにエラーが発生した時に、エラーコードをプロンプトに張り付けると、何がエラーになり、修正した箇所を説明しつつ、最初から最後までの修正版コードを抽出してくれる。はじめに貼ったコードを削除して、新しいコードを張りなおせばコードとしてはOK。修正箇所については別途回答してくれている内容を確認すればいい。
 正直、コードレベルで何やっているかを細かくわかっていない人間にとって、この箇所だけ修正してね、と言われるより、修正したバージョンをお届けしますのほうが助かるのだ。(Claude 3.5 Sonnetは、有料版での提供で、無償版だとスクリプトは回答の中に埋め込まれたままである。また、ChatGPT(無料/有料)でも同様)

プロンプトの事例(R編)

 R(Rstadio)を使う最も多いパターンは重回帰分析周りだと思う。その例をお伝えしたい。以下はよく使ったプロンプトを例示用に加工したものだ。

RStadioを使用して、重回帰分析を行いたいので、Scriptを書いてほしい。最初にワーキングディレクトリを「C:\Users\abc_xyz\OneDrive\Desktop\Rstadio」に設定し、データソースとしてファイル名「test_data.xlsx」をインストールしたうえで、必要なライブラリーの準備までScriptに加えてほしい。目的変数を対象ファイルの「修士学位への関心の有無」とし、説明変数を「性別、職業履歴、職業種別、年齢、職務歴、婚姻歴、子供の有無、在住地域」とする。多重共線性のチェックとステップワイズ法も試してほしい。なお、結果もsummaryとして表示したい。

こちらのプロンプトは田淵智子で作成しています。

 お気づきかと思うが、良い感じで分析してね、ではどういう解析をしたかを生成AIは答えてくれない。再現性がない分析など、研究においては悪手も悪手。けれど、このデータをこういう分析アプローチでしたい、と問えば、方法を答えてくれる。データが違っても再現できる環境ごと手に入るのだ。

Claude 3.5 sonnet(有料版のClaude)を使った場合の結果表示はこちら↑

 上記の右側の下にコピーボタンとダウンロードボタンがあるので、どちらでもワンクリックで必要な環境にコピペして使うことになる。左側の実施内容を確認しながら、右側の#でのコメントを見て、を繰り返すと自然とどういう指示がスクリプトとなるのかがわかってきたりもする。
 実ははじめはワーキングディレクトリの指定とかファイル名の指定とかしないとコピペだけではエラーになるスクリプトができる。そこから学習した結果として、このプロンプトができているとも言えるのですが、エラーから何が起こっているのかの解説と修正までしてくれるので新しい挑戦にも優しいと思う。

プロンプト例(データの匿名化)

 実はPythonならできるでしょ?と試したのが、データの匿名化。今回しなければならなかったのが、①匿名化は必須、②ただし属性と匿名化後の個体識別も必須、③対象ファイルが200ほどある、という状況だった。はじめに自分で作業した内容をもとに、匿名化用にPythonのコードを書いてもらったのが、次のようなものである。

Google Colabを使って、次の動作ができるpythonコードを作成してください。コードは項番ごとに分離して作成していただきたいです。
1.指定したGoogledriveのフォルダ(フォルダ名が「AI_setup」)に置いたエクセルファイルのファイル名に更新日時順にファイル名の先頭に001から項番を振って、ファイル名を更新してください。
2.更新したファイルのA列をコピーし、右となり(B列)に列を追加し、A列のデータを値貼り付けして下さい。
3.ファイルのB列のセルの"修士1年生"~"修士2年生"、"外部株主"~"合計"のセルの値をVlookupを使い、B列該当セルと同じ行数のA列の値を検索値とし、GoogledraiveのAI_refフォルダにある検索リスト.xlsxのダミー値リストというシートのA列からD列までを範囲とし、4列目を該当値を返すようにします。(完全一致を設定してください)
4.3が終わったら、B列を値貼り付けし、A列を削除して、フォルダ(AI_Dummy)に新しいエクセルシートを抽出してください。その時の元のファイル名の最初の3文字は元のファイル名を踏襲してほしいです。

こちらのプロンプトは田淵智子で作成しています。

 というわけで、こちらは直接統計というわけではない。しかし、統計学あるあるで、既知ではあると思うが、統計学はまずデータ入手とデータの整備という途方もなく泥臭い作業が発生する。その時に作業量を減らすことができる頼もしいやつなのだ。
 ここで唯一発生しているのは匿名化用のリスト一覧の作成なのだが、こちらのリスト作成も自動化している。ただし、匿名化ルールがちょっと特殊で個別で修正を入れる必要があったので、そこだけはマニュアル作業だった。

分離して表示してほしいというと分離して表示してくれるいい子…

プロンプト例(機械学習:クラスタリング K-means法)

 こちらは、とあるデータをもとにしたHackathonの時に使用。データはある。データの傾向が知りたいが、重回帰分析しちゃうと多重共線性がありすぎてどうにも掴みきれない。となり、授業で習った強化学習からクラスタリング分析(K-means法)を用いることを考えた。が、方法は知っていてもどうやってコードを書くのかは知らない。(例題でサンプルコードはもらっているけど)なので、こちらもClaude 3.5 Sonnetに作ってもらった。
 しかも特徴量の分析結果も日本語で解説してもらい、図表化もオーダーに入れたことで、凡そのデータの特徴が捕まえることができた。

Google Colab上でPythonを使ってクラスタリング(K-means法)を行いたいです。
Googledrive上のフォルダ「athlete」にあるCleanup_final.xlsxを用いて、Clas=4で行ってください。
変数はID, sex, age, high, weight, Kyogi_Cluster, Athletic_History, Tournament_History, Medical_Expenses, Amount_of_Medical_Expenses, Presence_of_Personal_Trainer, Student_Trainer, Injury_Illness, Number_of_Injuries_Illnesses, Training_Volume Competition_Volume, Number_of_Appearances, Off-Season_Training_Volume, Medical_History, History_of_Mental_Health_Treatment, Fatigue_Fractureです。
特徴量分析の結果とビジュアライズしたクラス結果が欲しいです。クラスターに影響を与える特徴量のTOP10リストも表示ください。

こちらのプロンプトは田淵智子で作成しています。

 このコードを書いてもらうプロンプトを書くときは、かつて習った強化学習に関する授業の内容を引っ張り出して、自分がしたいことができる方法論の名前や指定すべき指標などをしっかり確認してから望んだ。(授業と実践に時差があったため)

コードが説明に組み込まれた状態だったので、
コードをまとめてもらうプロンプトを追加すると右のとおり表示されました。

 こちらをGoogle ColabでPython回して出てきた結果を、さらに「以下を日本語でレポートして」とClaude 3.5 Sonnetに解説してもらった。そこから、どういう課題を抽出するかは人間のお仕事。ディスカッションのベースに、「機械だとこういう結果が出たよ」、を用いることは人間の思い込みの補正としていいなと思った。実際、当事者ヒヤリングもしていてデータもあっての状態で、ヒヤリング重視で考えてしまうとちょっと重点を置くポイントが違ったのだ。

まとめ

 このレベルでできると、これもできるかも?ということで生成AIをサポーターに自分ができることが増えてくる実感がある。x(旧Twitter)でClaude 3.5 Sonnetリリース時にコードが書けなくてもこんなこともできる!!というアイデアが多数提示され、その可能性の広さに私もやってみようというのが今回のきっかけでもあった。そして、やってみて思うのは、そもそも課題解決の方法を言葉で表現できる=プロンプトが書けることの重要性。もちろん、その点も独学でできるものではあるけれど、構造的に学習しにくい分野であり、数学に苦手意識があると初心者向けでも数学ZEROとはいかない分野なので、サポートされる学習環境があるのはありがたいなとも思った。

※ 本記事は、個人の経験に基づくもので、これが正解!!とかではございません。ただ、最初の一歩として利用していただく参考にしていただくことを目的としています。悪しからず。

この記事が気に入ったらサポートをしてみませんか?