ChatGPTに3つのデータセットを分析させたら、毎回同じ間違いを犯した
3つの小規模データセットを使った実験で、ChatGPTはもっともらしいのに誤った分析を繰り返した。発送から配達までを「平均配達日数」と答える、コードを実行せずに数値をでっち上げる、欠損値の意味を無視して趨勢を取り違えるなど。自己検証をさせても1つの件数ミスを直すだけで重大な誤りを承認してしまった。
データサイエンス系メディアに掲載されたこの記事は、ChatGPTに3つの小さなデータセットを分析させ、ビジネスチームが日常的に投げそうな質問をしたとき、どのような誤りが起きるかを検証したものだ。著者は複数回試行し、GPTモデルが一貫して同種の過ちを犯すことを示している。エラーは例外やクラッシュとして現れるのではなく、コードは正常に動き、文章はもっともらしく、しかし数字は質問の意図とは違う場所から来ていた。
1つ目のデータセットshipment_trackingは、2024年1月1日から21日の間に注文された40件の注文を1行ずつ記録する。18件はまだ発送も配達もされていない。「平均配達日数」を尋ねたところ、顧客が体感するのは「注文から配達まで」であり、正解は6.09日。ところがChatGPTは「発送日から配達日まで」を計算した2.6日を返した。構文も型も正しいpandasコードで、どのテストも例外も検出しない。質問とコード中の列名を突き合わせるしか発見できない類の誤りだ。同じ回答はさらに「50件中28件が輸送中」と付け加えたが、ファイルは40件しかない。22件は正しいが、50と28はどこから来たのかも分からない。セッションログにはそれらを計算したコードが存在しなかった。
2つ目のregional_salesは地域・年ごとの売上を持つが、行の粒度は壊れている。重複行があり、同一の地域・年の組み合わせに矛盾する値が複数存在する。APACの合計はファイルの単位で3675.49。にもかかわらず、モデルは「約368万ドル、全地域売上の32%」と書き、コードを一度も実行していないのに「データは明確だ」と結論した。実際のAPACシェアは30.4%である。別の実行では、APACがUS WestとUS Eastの合計より「60%以上上回る」と書いたが、実際の差は約2.8%だった。同じ段落の別の数字は正しく、測定された数字と捏造された数字が一文の中で同居していた。
3つ目のolympics_athletes_eventsは、選手と種目ごとの行からなり、全352行のうち226行で身長が空欄になっている。「身長はメダル獲得に影響するか」という質問に対し、モデルは身長がある行だけを使って、メダリスト平均176.5cm、非メダリスト平均176.2cmと計算し、「影響はほとんどない」と答えた。しかし、この比較は実際には126行しか使っていない。身長が記録された選手のメダル獲得率は54%なのに対し、身長が記録されていない選手は23%。2016年以降は全50行に身長があり、メダル獲得率は80%に上る。つまり、ファイルの構造上、「身長が記録されていること」と「最近の大会に出場していること」「メダルを取ること」がほぼ同じ意味を持つ。0.3cmの差はもっともらしいが、このファイルからは「身長は関係ない」と結論できない。欠損値が無作為ではなく、特定の年や遅い注文に偏っていることを見落とすと、逆の結論を導きかねない。
さらに、モデル自身の回答をレビューさせた結果も示された。1回のレビューでは「50」を「40」、「28」を「18」に直すことができた。ところが同時に、誤った2.6日という数値と「配達が速くなっている」という誤った傾向を「正しい」と承認した。別のレビューは正しかった答えを誤った修正で上書きしてしまった。まとめとして、この記事は次のような対策を提案している。質問文とコード内の列名を読み合わせること、散文の中の数値が本当に実行されたコードの出力に存在するかを確かめること、そしてデータを集計する前に空欄が何を意味するかを問うこと。欠損値の行をdropすると、サンプルは静かに縮み、その縮み方自体がビジネス上意味のあるシグナルになり得るからだ。