Mirai Translate TECH BLOG

株式会社みらい翻訳のテックブログ

AIはどこまでデータ分析者を楽にしてくれるのだろう

この記事は みらい翻訳のカレンダー | Advent Calendar 2023 - Qiita の 21 日目です。

 

こんにちは、プロダクトマネジメント室の八木です。社内ではChuaと呼ばれています。

社内ではデータ分析をしている傍ら、大学院で東南アジア政治の定量的・定性的な研究をしています。

LLMや生成系AI、アツいですね。私もChatGPTや最近発表されたJetbrains AIを使ってサクサクっとコーディングしたりしてます。

そこで天啓が舞い降りました。「ChatGPTとかJetbrains AIをフル活用したらデータ分析めっちゃ楽にならんか?」と。

 

最終的なゴール

この記事のゴールはデータ分析者として「どこまで楽ができるか」を検証するものです。

楽をしたいというゴールが定まったら、次に「どの観点で?」という疑問が出てきます。 そこで一旦のスコープを「実装」と「文章作成」に狭めます。

データ分析において、実装と文章作成の比重ってそんなに高くないし前処理とかの方が大変でしょう?というのは聞こえないふりをします。 私は堕落した人間なので分析結果とそのインサイトだけが知りたくって実装と文章作成ですらちょっと面倒に感じてきました。 なので実装と文章作成もAIに何とかしてもらおう!という考えに至りました(実際にはそんな考えを微塵も持ってないんですけど...念の為)。

生成系AIの話になるとハルシネーションやら何やらの議論になるので、適宜人間が介入するようにしますができるだけAIサービスに頼りたいです。

 

To Do

ゴールが定まったのでここで目的が達成されたか検証する方法を考えます。 分析をたくさんして、そのインサイトを文章としてまとめるようなタスク...かつ、社外秘に触れることがないもの。 そう、論文です。最近論文がアクセプトされて12月末に出版されるのでそれの分析と執筆をAIサービスを使って再現できないかなと思います。 とはいえ、出版前のものですし、何より著作権とかそういう怖いものが関係しそうなので論文で扱ったデータや分析とは異なるデータと分析をしたいと思います。

 

分析タスクについて

私は元々地域研究という分野で研究をしており、現在はデータ分析を仕事にしています。来年から社会人博士をします(進学OKって言ってくださった会社に圧倒的感謝!一生ついていきます!)。

それで、地域研究という広い枠組みの中にあって、東南アジアの島嶼部はマレーシアという国の政治を研究しています。

特に最近は政権交代が何度も起こっているのでこれをテーマに論文を書いたりしています。

12月末に出る論文では2018年に執り行われた第14回総選挙までの分析をしています(執筆時: 2022年春)。

それで、2022年の秋に第15回総選挙が行われました。なので第14回総選挙までの分析で得られたインサイトが第15回総選挙の投票行動でも見られるかを検証します。

マレーシアでは民族的な要因や経済階級による要因が有権者の投票行動に影響しそうだということを出版予定の論文で書きました。

なので、「第15回総選挙において民族的な要因や経済階級による要因が有権者の投票行動に影響するかどうか」を統計的に見ていきます。

 

c.f., 民族的な要因 is 何?

経済階級によって支持政党が変わることは想像に難くないと思います。例えば税の負担が大きい代わりに分厚い社会保障を現職与党が提供していたらその恩恵を受ける人たちが支持すると予想されます。

これに対して民族的な要因は想像しづらいですね。日本だとあんまり想像できないんですけどマレーシアは多民族国家であり、民族ごとに支持政党が異なっています。例えば「ブミプトラ政策」は民族的に最大多数派であるマレー人に有利なものであって、中華系の反発を招いたりしました。このように、民族ごとに国から得られる恩恵が変わったりするなど色々な経緯から支持政党が決まることを指して民族的な要因とここでは呼ぶことにします。

 

何を活用するか

LLMや生成系AIを使ったサービスっていろいろありますよね。ありすぎて何を活用するか迷います。

ここでは独断で分析のアウトラインと文章執筆には「ChatGPT(ver. 4)」を、コーディングでは「Jetbrains AI」を活用します。

あとは適宜私がテコ入れをしていくという方針にします。

 

やってみよう!

⚠︎本当は先行研究のレビューとかやらないといけないんですけどここでは端折ります。

一旦「民族的な要因」と「経済階級による要因」が投票行動に影響すると仮定します。

これらが本当に影響するかどうかを測定するために回帰分析を用います。

ただ、回帰分析をそのまま適用すると疑似相関とかの問題に直面する可能性があるので交絡因子を調整します。

何を調整すべきかChatGPTに聞いてみましょう。

 

私:

マレーシアでは有権者の投票行動に影響する要因として「民族的な要因」と「経済階級による要因」が挙げられます。これらが投票行動に影響することを重回帰分析で検証します。その時に交絡因子として考えられそうな変数ってなんですか?

 

ChatGPT: 

マレーシアにおける有権者の投票行動に影響を与える「民族的な要因」と「経済階級による要因」を重回帰分析で検証する際、考慮すべき潜在的な交絡因子はいくつかあります。これらの因子は、民族や経済階級以外の要素が投票行動に与える影響を制御するために用いられます。以下に例を挙げます:

1. 教育水準:教育水準は政治的意見や投票行動に影響を与える可能性があります。高い教育を受けた人々は異なる政治的傾向を持つ可能性があります。
2. 年齢:年齢層によって政治的嗜好や優先順位が異なることがあります。たとえば、若年層と高齢層では異なる政党や政策に対する支持が見られることがあります。
3. 地域:居住地域(都市部か農村部か、あるいは特定の州や地区)も投票行動に影響を与える可能性があります。地域ごとに経済的条件や政治的環境が異なるためです。
4. 性別:男性と女性では異なる政治的傾向や問題に対する関心があるかもしれません。
5. 宗教:マレーシアは多宗教国家であり、宗教的信念は政治的選好に影響を与える可能性があります。
6. 職業:職業によって経済的利益や社会的立場が異なり、それが政治的選好に影響を及ぼすことがあります。
7. 家族の政治的背景:家族や親族の政治的傾向や活動が個人の投票行動に影響を与えることもあります。
これらの交絡因子をモデルに含めることで、民族的な要因や経済階級による要因が投票行動にどの程度影響を与えるかをより正確に評価することができます。ただし、これらの変数の選択やデータの収集には慎重に取り組む必要があります。また、すべての可能な交絡因子を含めることが常に現実的または必要とは限らないため、研究の目的や利用可能なデータに基づいて適切な選択をすることが重要です。

なかなか筋がいいですね。年齢や地域は確かに投票行動に影響するように思えますし、先行研究でも色々議論されています。
ただ、これらが交絡因子になるかは微妙なところですね。マレー人と中華系で出生率が違うので年齢は民族構成→民族的な要因に影響しそうですし、若年層であることが投票行動に影響するとは先行研究で議論されています。なのでこれは交絡になりそうです。
では地域はどうでしょうか。専門用語になるのですが、マレーベルトと呼ばれる地域があり、これは半島部マレーシアにおける北東部を指しています。ここはマレー人の割合が高く、伝統的にUMNOとPASという二つの政党が激しい選挙戦を繰り広げてきました。なので民族構成にも投票行動にも影響しそうです。これも交絡因子になりそうですね。
ということをChatGPTに聞いてみましょう。

 

私:

年齢と地域は交絡因子になりそうです。マレーシアでは民族ごとに出生率が異なり、それによって年齢で民族構成が異なりそうです。また、若年層はその上の世代と比べて民主化やクリーンな政治に興味関心が高いと言われており、年齢によって支持政党が異なるかもしれません。なので民族集団の割合を使って民族的要因が投票行動に与える影響を測定するときには年齢が交絡因子になりそうです。 そして地域ですが、確かに半島部マレーシアの北東部はマレーベルト(Malay Belt)と呼ばれており、マレー人の割合が他の地域と比べて高いです。また、この地域では伝統的にUMNOとPASが激戦を繰り広げており、特にPASの得票率が高いです。そのため、地域も民族的要因と投票行動の両方に影響する、すなわち交絡因子になりそうです。 こうした理由から重回帰分析のモデルでは、 従属変数に投票行動(国民戦線の得票率で測定)、独立変数に原因となる「民族的な要因」、そして「経済階級による要因」、さらには交絡因子として「年齢」と「地域」を入れようと思います。この分析は妥当ですか?

 

ChatGPT:

マレーシアの有権者の投票行動を分析するために、従属変数として「国民戦線の得票率」、独立変数として「民族的な要因」と「経済階級による要因」、そして交絡因子として「年齢」と「地域」を使用するというアプローチは、理論的には妥当です。このアプローチが適切な理由を以下に挙げます:

1. 民族的な要因:マレーシアの民族構成は非常に多様で、民族間の政治的選好や政党支持が異なる可能性があります。
2. 経済階級による要因:経済的地位や階級は、政治的選好や投票行動に影響を及ぼすことが一般的です。
3. 年齢:民族集団間で出生率が異なる場合、年齢層によって民族構成が変化する可能性があります。また、若年層の政治的関心や選好が異なることが予想されるため、年齢は重要な交絡因子になります。
4. 地域:地域によって民族構成や政治的風土が異なるため、特にマレーベルトのような特定地域では、地域が重要な交絡因子となり得ます。
この分析では、各変数間の関係を正確に理解し、適切なデータを収集することが重要です。また、以下の点にも注意が必要です:

- データの収集と品質:分析に使用するデータが正確で、代表的であることを確認する必要があります。
- モデルの仮定:回帰分析の各種仮定(線形性、独立性、多重共線性の回避など)が満たされているかを検証します。
- 追加分析:可能であれば、回帰分析の結果を他の方法(例えば、時間的なデータを使用した時系列分析)で検証することも有効です。
以上の点を踏まえ、提案されたモデルはマレーシアにおける有権者の投票行動を分析するのに適切な出発点となり得ます。ただし、統計的分析は複雑であり、分析の結果はデータとモデルの仮定に大きく依存するため、結論を導く際には慎重な解釈が必要です。

 

私の見解と結構近いですね。ではこのモデルを実装して検証していきたいと思います。 Jetbrains AIに頑張っていただきましょう。

 

私:

R言語のbrmsパッケージで回帰分析を実装してください。 やっていただくタスクは以下の通りです。 brmsで回帰分析を行う describe.posteriorで事後分布のチェックをしてください。 モデルは以下の通りです bn_share~malay+income+pct_under29+malay_belt データはdataという名前で読み込んでいるのでそれを使ってください

 

Jetbrains AI:

申し訳ありませんが、現在のプロジェクト設定ではPythonが使用されており、R言語及びそのパッケージであるbrmsの利用はサポートされていません。 しかし、R言語でbrmsパッケージを使用して回帰分析を行うことが可能です。次のRコードは、ブレイク・バネットを用いてデータセットdataのモデルbn_share~malay+income+pct_under29+malay_beltの回帰分析を行い、その事後分布を確認するものです:

if(!require(brms)) {
 install.packages('brms')
}

# Load brms package
library(brms)

# Perform Bayesian regression using brm function
fit <- brm(bn_share~malay+income+pct_under29+malay_belt, data = data, family = gaussian())

# Check the posterior distribution using describe_posterior function
describe_posterior(fit)

ただし、上記のコードはあくまで一般的な例であり、実際のデータセットdataやモデルがどのような形式であるか、どのような前処理が必要であるかによっては、追加的なコードが必要になる場合があります。 また、RコードはPythonのプロジェクトでは直接実行できませんのでご注意ください。R環境やRStudioなどを使用して実行することを推奨します。

横着してPythonプロジェクトに作ったので警告が出ましたが動きそうなコードができました。
実行するとfitまではうまくいきますね。ただし、describe_posteriorを使うにはライブラリのbayestestRが要ります。
実装はある程度やってくれますが抜けてるところがありますね。人間によるチェックが必要です。
結果は以下の通りです:

 

Parameter   |    Median |         95% CI |     pd |          ROPE | % in ROPE |  Rhat |     ESS
-----------------------------------------------------------------------------------------------
(Intercept) |      0.24 | [ 0.15,  0.32] |   100% | [-0.01, 0.01] |        0% | 1.002 |  479.00
malay       |      0.39 | [ 0.33,  0.47] |   100% | [-0.01, 0.01] |        0% | 1.039 |  196.00
income      | -1.66e-05 | [ 0.00,  0.00] |   100% | [-0.01, 0.01] |      100% | 1.004 | 1473.00
pct_under29 |     -0.30 | [-0.59, -0.01] | 97.70% | [-0.01, 0.01] |     0.24% | 1.023 |  198.00
malay_belt  |     -0.17 | [-0.21, -0.13] |   100% | [-0.01, 0.01] |        0% | 1.016 |  227.00

 

これをChatGPTに解釈してもらってドキュメントを書いてもらいましょう。

 

私:

ベイズの重回帰分析をしました。結果は以下の通りです。

Parameter   |    Median |         95% CI |     pd |          ROPE | % in ROPE |  Rhat |     ESS
-----------------------------------------------------------------------------------------------
(Intercept) |      0.24 | [ 0.15,  0.32] |   100% | [-0.01, 0.01] |        0% | 1.002 |  479.00
malay       |      0.39 | [ 0.33,  0.47] |   100% | [-0.01, 0.01] |        0% | 1.039 |  196.00
income      | -1.66e-05 | [ 0.00,  0.00] |   100% | [-0.01, 0.01] |      100% | 1.004 | 1473.00
pct_under29 |     -0.30 | [-0.59, -0.01] | 97.70% | [-0.01, 0.01] |     0.24% | 1.023 |  198.00
malay_belt  |     -0.17 | [-0.21, -0.13] |   100% | [-0.01, 0.01] |        0% | 1.016 |  227.00

これからどんなことが言えますか?

 

ChatGPT:

ベイズの重回帰分析の結果を解釈する際には、主にパラメータの中央値(Median)、95%信頼区間(95% CI)、事後確率密度(pd)、ROPE内の割合(% in ROPE)、Rhat、および有効サンプルサイズ(ESS)に注目します。これらの結果から以下のことが言えます:

1. (Intercept)(切片):
  - 中央値: 0.24。これは、他のすべての変数が0の場合の予測される国民戦線の得票率です。
  - 95% CI: [0.15, 0.32]。この信頼区間は切片の不確実性を示しており、この区間内に真の切片の値があると推測されます。
2. malay(マレー人の割合):
  - 中央値: 0.39。マレー人の割合が1%増加するごとに、国民戦線の得票率は平均して約0.39%増加することを示しています。
  - 95% CI: [0.33, 0.47]。信頼区間が0を含まないため、この影響は統計的に有意です。
3. income(収入):
  - 中央値: 約-1.66e-05。これは収入が1単位増加するごとに、国民戦線の得票率が平均して微小に減少することを示しています。
  - 95% CI: [0.00, 0.00]。信頼区間が0を含むため、この影響は統計的に有意ではない可能性があります。
 4. pct_under29(29歳以下の割合):
  - 中央値: -0.30。29歳以下の割合が1%増加するごとに、国民戦線の得票率は平均して約0.30%減少することを示しています。
  - 95% CI: [-0.59, -0.01]。信頼区間が0を含まないため、この影響は統計的に有意です。
5. malay_belt(マレーベルト):
  - 中央値: -0.17。マレーベルト地域であることが国民戦線の得票率を平均して約0.17%減少させることを示しています。
  - 95% CI: [-0.21, -0.13]。信頼区間が0を含まないため、この影響は統計的に有意です。
その他の重要な指標:

Rhat:すべての変数で1.04以下であり、収束に問題がないことを示しています。
ESS:有効サンプルサイズは、特に「income」変数で比較的高く、十分なサンプリングが行われたことを示唆しています。 この分析から、マレー人の割合、29歳以下の割合、およびマレーベルト地域であることが国民戦線の得票率に統計的に有意な影響を与えていることがわかります。一方で、収入の影響は統計的に有意ではない可能性があります。ただし、これらの結果の解釈は、分析の文脈とモデルの仮定に基づいて行う必要があります。また、ベイズ分析は事前分布の選択に敏感であるため、事前分布の仮定についても考慮することが重要です。

なるほど...(?)な結果です。ベイズ統計でって言ってるんですけど信頼区間とか有意差など頻度論で見かける用語が散見されていて、とてもじゃないですがコピペでこの文章を成果物としてあげるのは怖いですね。
一方で良さげなことも言っています。「信頼区間が0を含まないため、この影響は統計的に有意です。」は95%信用区間が0を含む/含まないという議論を指していると考えられます。
また、ROPE内の割合(% in ROPE)についても触れていますね。私自身はHDI+ROPEの枠組みで効果があるかないかを判断することが多いです。 民族的な要因が投票行動に影響してそうというのはわかりました。income=収入でみた階級はデータを標準化してやるとHDI+ROPEの枠組みで影響していることがわかるのですが、今後使うデータにしたいのでここでは端折ります。

今回の検証から、やっぱり結果を丸投げして「インサイト出してちょ」だと全然まともなドキュメントは書いてくれないことがわかりました。
もしかするとプロンプトを丁寧に作るといい感じになるかも...という所感です。
実装も下訳としてはある程度工数削減につながるかもしれません。 一方で最初の分析段階の壁打ち役としてはそこそこ役立ちそうです。 まとめると

  • 分析の最初の段階での壁打ち役としては役立ちそう
  • 実装部分は下訳としては役立つがライブラリとかの知識を分析者がちゃんと持ってないとダメそう
  • 結果を解釈させるのを丸投げすると怪文書を生み出す

という感じでしょうか。うーん、まだまだ楽はできなさそうですね。頑張っていきます。

 

We are hiring!

みらい翻訳では、私たちと一緒に機械翻訳のプロダクトづくりを進めていただけるエンジニアを募集しています! ご興味のある方は、ぜひ下記リンクよりご応募・お問い合わせをお待ちしております。

 

miraitranslate.com