Code Interpreterの所感。
Code Interpreterを使って、データ分析が簡単にできるようになった、ということなので、タイタニックのデータをアップロード・集計可視化・分析のサイクルを自分でも何回かやってみて、感じたこと。
感じたことのまとめ
全ての人にデータ分析が開けた、というのは少し過剰。
Code Interpreterが出力する結果をレビューする能力が必要。ネット上でCode Interpreterが〇〇を解けていると紹介している方を観察すると、その方が既に解けている問題を解いている人が多い。
その方自身が〇〇の問題をCode Interpreterを使わずに解ける人だから、解けているというレビューができている。必要な数式がその人の中に既に存在している。
解けるだけの最低限の情報は問題文として付与され、必要なデータが綺麗に整備されている。
まだ自分の中で解けていない問題をCode Interpreterに解いてもらった、という人は見当たらない。いざ自分の手元にあるデータをCode Interpreterで何かするときには、設定された問題に対し何かの数式でCode Interpreterが解いてくれるがその式が何かをレビューする能力が必要だし、そのデータが問題を解くために十分なのか、というのは初めはわかっていないはずである。また設定された問題が適切かどうか、ということすらもわかっていない。
レビューする能力があるのとないので何が変わるか
正解までたどり着ける速度
経験値のある人は自分が過去につまづいた場所を知っており、レビューするポイントがわかっているため、レビューを的確に文章で伝えられ、対話の回数が少なく済み、正解までたどり着ける速度が速い。経験値の有無で対話の回数は1/10以下にできると思います。
一方、経験値をこれから積む人は、レビューするポイントがわからない。よって出てきた結果を常に可視化し、1歩1歩確からしいことを確認しながら進めることになる。その結果、対話の数が増えるため時間はかかるが、1歩1歩確認することで正解までゆっくりたどり着くことができる。よくStep by stepと指示すると結果が良くなった、という話があるが、ユーザー側も同じく1歩1歩やっていく。
リスク管理
Code Interpreterは欠損や擬似相関などの有名なリスクは対応してくれますが、そのデータは~という生成背景だからこの問題を解くのに適切であるかどうかといったデータのリスクや、解くべき問題とCode Interpreterに解いてもらう問題との乖離がもたらすリスクなど、Code Interpreterが知りえないリスクはユーザーがレビューし、リスク管理をする必要があります。経験値のある人は得られた結果のリスクをレビューすることができますが、経験値をこれから積む人は、ちょっと失敗しても大丈夫なリスクの小さい問題から扱っていくのが安全です。
Code Interpreterでやったこと
ここから先はCode Interpreterに実際にデータを入力して手を動かした結果です。30分~1,2時間くらいの対話をしています。
まず、データはRが標準で持っているTitanicをas.data.frame(Titanic)でDLしたものを利用。データの最初の5行は以下の通り。1行がクラス、性、年齢、生存、人数を示したもの。
Class,Sex,Age,Survived,Freq
1st,Male,Child,No,0
1st,Male,Child,Yes,5
2nd,Male,Child,No,0
2nd,Male,Child,Yes,11
…
このタイタニックのデータをCode Interpreterで、色んな方の目の前でデモを3回する機会があったので、3つのチャットの履歴があります。
このタイタニックのデータはナントカモデルにかけようとすると、Freqに工夫がいるデータで、生存のYes/Noの人数(Freq)を集計してYesの比率の変数を作成するか、Freqを重みとして処理する、などと何らかの処理が必要なのですが、3つのチャットの内、1発でそれがバグなくできているものはこのうち1つ。(その1つもちょっと怪しいが。)
1つ目のチャットではSurvivedの比率を求めたときに0.5と計算してしまっている。これはFreqを使わずに、レコードの数を集計したものであるため。
Class_2nd Class_3rd Class_Crew Sex_Male Age_Child Survived
13 0.0 0.0 1.0 0.0 1.0 0.5
11 0.0 1.0 0.0 1.0 1.0 0.5
8 0.0 1.0 0.0 0.0 0.0 0.5
9 0.0 1.0 0.0 0.0 1.0 0.5
2 0.0 0.0 0.0 1.0 0.0 0.5
2つ目のチャットでは、元々のデータが1行がクラス・性・年齢・生存の集計値だったのを、1行を1人に変換してロジスティック回帰を試みようとしているが、Freqが1になっていないので惜しい。
Class,Sex,Age,Survived,Freq
2,1,1,0,35
2,1,1,0,35
2,1,1,0,35
2,1,1,0,35
2,1,1,0,35
2,1,1,0,35
3つ目はFreqに関する処理を全く考慮していない。
このようにデータ分析が1回の指示で結果が正しく完結することはない。Code Interpreterの出力をレビューしてそれを対話しながら1歩1歩解決していくためのアプリケーション、と思って利用するのが良い。