日本学術会議 任命拒否AI 〜エレガントな答弁書作成に向けて〜

## 前略、官僚のみなさま
日本学術会議の任命拒否が問題になっていますが、
官僚のみなさまにおかれましてはいかがお過ごしでしょうか。

菅首相の任命拒否理由について、

- 「総合的、俯瞰（ふかん）的に」
- 「多様性を念頭に判断した」
- 「旧帝国大学に所属する会員が４５％」
- 「民間出身者や若手が少なく偏りがある」

などと、徐々に具体感を追加してみた答弁がされているわけですが、

- 「私大所属も拒否されている」
- 「（そもそもマイノリティである）女性も拒否されている」

といった矛盾を秒で指摘されてしまっている次第……

ただ、既に~~勝手に拒否してしまった~~ご決断されたあとに
首相に逐一理由をお聞きするわけにもいきません。
上席の意図を汲むのが優秀な部下というもの。[^1]


## 首相知を紐解く機械学習

一方、推薦名簿から意図（ロジック）を見出そうと
様々な軸でエクセル集計しても有意な特徴はなかなか発見できず……

そんなときは"AI"にお任せしましょう。
AIによる"任命拒否予測"のための学習を通して、ルールを見出そうというわけです。[^2]
![Picture_kaigi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129715/8ec44c6d-6d1e-6988-554e-967d86aef8d8.png)



## データ・特徴量・モデル
- 名簿データは、日本学術会議公式HP内で公開されている
「第25期日本学術会議連携会員名簿（全体版）　令和2年10月1日現在」[^3]を使用
- 任命拒否された推薦者の情報（氏名、所属、専門分野）は、Wikipedia参照[^4]
- 専門分野は、Wikipedia情報を元に、上記名簿と照らし合わせたうえで筆者作成
    - 神学部/宗教学研究科の方に「哲学」が付与されていたため、キリスト教学にも「哲学」を付与
    - 「政治思想史・政治哲学」は「政治学」「哲学」を付与

|氏名（敬称略）|専門分野|
|---|---|
|芦名　定道|哲学|
|宇野　重規|政治学・哲学|
|岡田　正則|法学|
|小沢　隆一|法学|
|加藤　陽子|史学|
|松宮　孝明|法学|

- ~~名簿すら見ていない~~ 推薦名簿くらいは目を通されたはずですが、現在の会員全員はご覧になっていないと仮定し、今回推薦された105名を対象とした
    - 予測モデル構築が真の目的ではないため、全量を学習データとして使用

- 特徴量としては、「性別」「年齢」などの他に「所属・職名」に含まれる文字列を特徴量化して使用
    - 旧7帝大の名前を含むか否か
    - 「立命館大学」「早稲田大学」を含むか否か
    - 「国立」「株式会社」を含むか否か

```python

def add_kw_col(df, target, kw):
    """
    @param {DataFrame} df 大元のデータフレーム
    @param {string} target kw文字列を含むかどうか判定する列名
    @param {string} kw 当該含まれている行は1,含まれていなければ0
    """

    col = "{}in{}".format(kw, target)
    df[col] = 0
    df.loc[df[target].str.contains(kw), col] = 1

    return(df)

# 例えば、所属・職名の旧帝大判定
# 「○○大学in所属・職名」という列を追加し、1/0のフラグを立てる
teidai = ["東京大学", "京都大学", "大阪大学", "東北大学", "名古屋大学", "北海道大学", "九州大学"]
for kw in teidai:
    df_all = add_kw_col(df_all, target="所属・職名", kw=kw)
```


- モデルは、拒否理由が明確でエレガントな答弁書を作成することも目的としているため、解釈性の高い決定木を使用
  - 要は「推薦者をこの項目のこの値で2つのグループに分けたら、任命された人と拒否された人を比較的キレイに分けられるな」というルールをコンピュータが勝手に考えてくれるもの

```Python
from sklearn import tree

max_d = 6
clf = tree.DecisionTreeClassifier(criterion='gini',
                                  splitter='best', 
                                  max_depth=max_d, 
                                  min_samples_split=2,
                                  min_samples_leaf=1, 
                                  min_weight_fraction_leaf=0.0,
                                  max_features=None, random_state=None,
                                  max_leaf_nodes=None, class_weight=None, presort=False)
clf = clf.fit(X, y)
```


## 結果・考察

構築された決定木が下記である。
![dt_kaigi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129715/37575f1b-406e-35ef-e6c5-a82cab2e829a.png)


細かい数値はさておき、文字に起こすと……[^6]

1. 法学が専門で立命館大学の所属だったら、**拒否！**
2. 法学が専門かつ環境学は専門でない61歳以上で早稲田大学所属だったら、　**拒否！**
3. 法学が専門で、年齢が61歳以下だったら、**拒否！**
4. 哲学が専門で、年齢が56歳以下だったら、**拒否！**
5. 史学が専門で、東京大学の所属だったら、**拒否！**
6. 哲学が専門で、年齢が63歳以上だったら、なんとなく拒否するかも

「旧帝がー」「若手がー」「民間がー」はあまり関係がないようです。

**"AI"ですら拒否理由がわからなかった**のは6.で
任命拒否されたとされる芦名教授と現会員である吉岡教授は、
同じ京都大学に所属され、年齢も同じ64歳、哲学がご専門ということで、
今回の分析では拒否理由がわかりませんでした。

特徴量が不足しているということですね……
決断の際は首相が~~どこかから~~名簿以外の情報を得られたということなのでしょう。

## おわりに
* 要は「誰かの判断を再現したい」ということなので、AI導入PRJでは「属人化の回避」や「ベテラン知の活用」などよくあるテーマといえばよくあるテーマ
* 「首相が~~思いつきで~~発言しちゃったことに後から理由をつけてくれるAI」というのも、データが整備されていればおそらく可能[^7]
* 官僚の働き方改革、国会の紛糾回避、ひいては内閣支持率の向上に向けて不可欠なDXだと考えますが、平井担当大臣いかがでしょうか。



[^1]: 官僚の方々が当該答弁を書かれているのかは存知ませんが
[^2]: 実際のPRJでこういうことするのは本当よくない。予測と因果推論は分けて考えましょう。クライアントが途中から因果推論したがりますが、上品に拒否しましょう。
[^3]: http://www.scj.go.jp/ja/scj/member/pdf/25renkei_meibo.pdf
[^4]: [日本学術会議の任命拒否@Wikipedia](https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E5%AD%A6%E8%A1%93%E4%BC%9A%E8%AD%B0%E3%81%AE%E4%BB%BB%E5%91%BD%E6%8B%92%E5%90%A6)
[^5]: 「決定木　機械学習」で検索
[^6]: "hogehoge<=0.5"は"hogehogeが0"であり、分岐を左にいくとYes、右に行くとNoなので、「hogehogeでない」が左、「hogehogeである」が右にすすむ
[^7]: 本当はGBDTでSHAPまでやろうかと思いましたが、おふざけなのでやめました