hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

Python StatsModels メモ

R と比較すると微妙にサポートされていない機能があって困ることが多い StatsModels ですが、Python に寄せていきたいので、できるだけ使ってみてます。

ライブラリのロード

import statsmodels.api as sm

# R互換の関数方式を使う場合はこっち
import statsmodels.formula.api as smf

データのロード

import pandas as pd
data = pd.read_csv('data.csv')
# TSVは、data = pd.read_csv('data.tsv', delimiter='\t')
data = data.fillna(0) # 欠損値がある場合は 0 で埋める

モデルの定義

単回帰

model = sm.OLS(data.y, sm.add_constant(data.x))
#  あるいは、 model = smf.ols('y ~ x', data)
results = model.fit()
results.summary()

重回帰

model = sm.OLS(data.y, sm.add_constant(data[ ['x1', 'x2', 'x3'] ]))
#  あるいは、 model = smf.ols('y ~ x1 + x2 + x3', data)
results = model.fit()
results.summary()

ロバスト回帰

model = sm.RLM(data.y, sm.add_constant(data.x))
#  あるいは、 model = smf.rlm('y ~ x', data)
results = model.fit()
results.summary()

分位点回帰

from statsmodels.regression.quantile_regression import QuantReg
model = QuantReg(data.y, sm.add_constant(data.x))
#  あるいは、 model = smf.quantreg('y ~ x', data)
results = model.fit(q = 0.5) # 50%分位点
results.summary()

リッジ回帰、ラッソ回帰、Elastic Net

model = sm.OLS(data.y, sm.add_constant(data.x))
results = model.fit_regularized(L1_wt=0) # L1_wt が 0 の時 リッジ、1の時ラッソ、その間が Elastic Net
results.params

OLSと同じだが、fit の代わりに fit_regularized を使う。ただ、fit_regularized だと、なぜか summary() が None を返すので、params の値を参照する必要がある。

一般化線形モデル (GLM)

model = sm.GLM(data.y, data.x, family=sm.families.Gamma())
#  あるいは、 model = smf.glm('y ~ x', data, family=sm.families.Gamma())
results = model.fit()
results.summary()

一般化線形混合モデル (GLMM)

model = sm.MixedLM(data.y, sm.add_constant(data.x), groups=data.g)
#  あるいは、 model = smf.mixedlm('y ~ x', data, groups=data.g)
results = model.fit()
results.summary()

グラフの表示

import matplotlib.pyplot as plt
plt.scatter(data.x, data.y) # 散布図
plt.plot(range(int(data.x.min()), int(data.x.max())), results.predict(range(int(data.x.min()), int(data.x.max())))) # 折れ線グラフ

# 図表をクリアする
plt.clf()

「グラフをつくる前に読む本」が名著だった話

最近、Twitter 経由でおすすめされている本を買うことが多いんだけど、これもその中の一冊。

装丁とタイトルだけ読むとグラフの書き方を図解で学ぶハウツー系の軽い本のように思えるけど、予想をいい意味で裏切る良書だった。似たような資料としてマッキンゼーのスタイルガイドがあるけれど、こっちの方は基本というより応用編的な難易度でなかなか使いにくく感じていたので、この本のシンプルさには感銘を受ける。

何がいいかと言えば、各グラフの説明だけでなく、そのグラフが生まれた歴史までがきっちり調べて書かれているところ。てっきり、いろいろなところで生まれたグラフ概念が洗練されて今の形になったのだと想像していたのだけど、現在使われているグラフのほとんどが1786年に発行されたウィリアム・プレイウェア著「The Commercial and Political Atlas」を起源とするというのには驚かされる。なんて有能な人なんだ。

とはいえ、このプレイウェア氏、様々な事業に挑戦したものの失敗し、詐欺、恐喝、名誉毀損と犯罪尽くめの晩年だった挙げ句、グラフの生みの親として評価されたのは19世紀以降と残念な人生だったようで。世の中うまくいかないものですなぁ。

もちろん、この本の良いところは歴史や用語の定義などきっちりバックグラウンドを書いているところだけではない。グラフの使い方について次のようなわかりやすい指針を示しているのは大変実用的だと思う。しかもこの内容を惜しげもなく本の最初にもってきてるは理解を容易にする意味でとても良い。

得意な表現方法 個別 全体
実数 割合
データ間の比較 棒グラフ レーダーチャート 円グラフ
積み上げ棒グラフ
時間の経過による推移 折れ線グラフ 面グラフ
データの偏り ヒートマップ
データ項目同士の関係 散布図

そうそう、これが知りたかったんですよ。*1

円グラフは使ってはいけない、という主張も説得的。なるほど、今後は円グラフでてきたら眉につばを付けて見るようにしよう、という気になる一冊。

*1:本書内での主張とグラフの配置が微妙に違っていたので一部修正しました

映画「ウィンストン・チャーチル」がよくわからない映画だった件

先日、映画「ウィンストン・チャーチル/ヒトラーから世界を救った男」を見てきた。

特殊メイクで話題の本作だが、たしかにそこはすごい。あらかじめわかっていても、とうていゲイリー・オールドマンが演じているようには見えない。ものすごく自然に見える。

とはいえ、特殊メイクが自然な分、見ている分には凄さがわからない。では映画の方はどうだったか。私には問題含みに感じられた。

一番の問題はテーマだ。

おおまかなストーリーはこうだ。徹底抗戦を主張していたチャーチルは戦時内閣の首相として任命される。不利な戦局に直面し政敵からの和平交渉提案に頭を悩ますが、最終的には市井の市民のくじけない意思を汲み取り徹底抗戦の道を選び、全政党の支持を取り付ける。そのまま普通に捉えれば、「信念を貫く素晴らしさ」が主題として選ばれているように思える。

しかし、だ。もしこれが太平洋戦争時の日本の立場ならどうだろうか。

不利な戦局に直面した大日本帝国の首相は、天皇陛下などからの和平交渉提案に頭を悩ますが、最終的には民衆の熱狂に煽られ、一億玉砕の道を選ぶことになる。素晴らしいどころか悲劇でしかない。大衆というものは、敵に面した時、戦争には熱狂的に賛同するのが普通であり、民意を聞いて徹底抗戦などというのは最低の決断と言っていい。

実際、イギリスにしてもアメリカが参戦しなければ厳しい状況が続いていたと考えられ、徹底抗戦の成功は結果論に過ぎなかったかもしれない。

そして、政敵であるハリファックス側に視点を移せば、彼もまた平和主義に基づく信念を貫いていることには違いなく、そのことを考えれば、チャーチルは素晴らしく、ハリファックスはダメという結論は一面的に思える。

しかも、史実を調べてみるとチャーチルは信念を貫いたわけではなく、「和平交渉が可能ならば飲むつもりだった」が、イギリスが不利な戦局だったため現実的には不可能だった、ということのようだ。

わざわざ史実を捻じ曲げてまで、なぜチャーチルを大衆に煽られた変人として描く必要があったのか。チャーチルの評価はそんなところにはないのではなかろうか。この映画が何を描きたかったのかさっぱりわからない。

映画は本来一番の見所になるはずのバトル・オブ・ブリテン前に終わってしまう。チャーチルはこの後、ロンドン市街をおとりにしてバトル・オブ・ブリテンに勝利し、ナチス・ドイツに対する突破口を開くという快挙を成し遂げるが、この映画での着地点はイギリス国民からの信任を得るところまでとなっている。このこと自体は歴史的快挙でもなんでもないだろう。

個人的には、チャーチルの信念ではなく、老獪で冷徹な思考でもって難局を切り抜けていく姿をこそ見たかったのだけれども。

「確率統計-機械学習その前に v2.0」を公開した

以前、社内の勉強会用の資料として作成した「確率統計-機械学習その前に」という資料を今回大幅に改定して公開しました。

改定の一番のポイントは、統計分析の総覧的なガイドとして使えるようにしたことです。正直な話、内容的に私自身も十分に理解出来ていない部分も多いのですが、いろいろ調べた結果、なんとなく統計分析の手法マップ的なものが頭の中に出来上がってきたので、それをアウトプットとしてまとめてみました。

 
確率統計に限った話ではありませんが、新しい分野を学ぶ初学者にとって、全体像がよくわからないため混乱することが少なくありません。この資料を読むことでなんとなくでも全体を把握できていれば、他の文献を読む際にも理解が容易になるのではと思っています。
 
例によって、確率統計については完全に素人なので、間違いもあるかもしれません。その場合はそっと教えてもらえると幸いです。最近 SlideShare は再アップロードが廃止され、直接修正が難しいところもありますが、何らかの形で訂正できればと思います。
 
資料化したことで個人的にも気づきがありました。
 
昨今、とりあえずなんでも機械学習に入れてしまえという風潮が目立ちますが、原因を分析し意思決定する場合には、機械学習非線形回帰はさほど役に立たず、確率統計こそが必要なのだ、ということがようやく理解できたような気がします。
 
その意味で、昨今ベイズ推定の本が増えているのは当然の流れなのかもしれません。頻度主義確率に基づく統計分析は理解も解釈も難しいのに対し、ベイズ推定による統計分析は(覚えるまでは大変ですが)結果の解釈も含め直観的で使い勝手のよいツールに感じられます。
 
そろそろ機械学習ブームが沈静化しつつありますが、次はベイズ推定ブームが来るのでは? などと勝手に想像しています。さて、どんなもんでしょう。
 

アニメ「未来日記」が面白かった話

若い頃は、と書くと年寄りじみてしまうけど、もうすぐ初老だ。悲しいかな、人間特に何もしていないのに歳だけはとっていく。押井守は「若さに価値などない」という。今に至り、それは概ね真理だとは思うけれど、そうとも言い切れない部分もある。ひとつは(本当にはないのかもしれない)可能性を夢見る能力、もうひとつは残り時間が長い分長期投資ができることだ。

歳をとったからこそわかることというのは多い。若い頃は、自分の面白いと思うものは誰もが面白いと思うものだと思っていた。大学くらいでその違いに気づき始めるが、その違いは話せば埋めることができるものだと思い込んでいた。そしてそのうち、世の中には想像を遥かに超えるいろんな考えの人がいることに気付いていく。

同じ職場にいて、同じように仕事をしていても、それぞれの生まれや性格、人生や立場があり、価値観は意外なほど異なっている。話せばわかりあえる、などというのはたまたま議論の参加者に共通点があったからかもしれないし、実際には噛み合っているようにみえただけで、各人の脳内に浮かぶものはまったく別なのかもしれない。

閑話休題Netflix でアニメ「未来日記」を見たところ、大変おもしろかった。以前からところどころで言及されるので気にはなっていた。

少し前の作品だからか、あまり言及を見ないけれど「未来日記」はいろいろと新しいアイデアが詰まっている。「未来日記」というガジェット自体、よくある特殊能力系のひとつとも言えるが、その能力の理由付けに合理性があり、携帯だけでなくボイスレコーダーや絵日記、巻物といったメディアの多様性もある。すごく良く出来たアイデアだ。

一番の発明は、「気の狂った殺人鬼かつストーカーだが、一途に愛してくれる」という異常なヒロイン像だ。好きが転じて殺人、というパターンはあったが、こんなキャラクターが成立するとは。

面白いと思うところは人それぞれだろうけど、見ていると自分が「新しい発想が好き」であることに気付かされた。具体的に書くとネタバレになるものが多いから書かないけれど、SFっぽいファンタジーが好きなのもそれに起因している気がする。

後半に行くに連れて斬新さは減ってくるけれども、最初から全力で話が展開していくので、まったく飽きることなく最終話までいっきに見てしまった。

良い悪いということではないけれど、普通の作品だったら、第一話はもっと日常風景を描写したり、主人公が妄想に浸る様子を見せて、その後の展開で驚かせるものだと思う。しかし、そういうまどろっこしい演出は一切ない。そういえば、作中では連続殺人、学校爆破でクラスメート殺戮、タワー破壊と、そうとう陰惨な出来事が起こっているにも関わらず、押しなべてあっさりした演出となっている。悲劇に躊躇も感情もない。

総じて、この作者の考えが私の思考の延長線上にまったくない。

どのキャラクターも狂人の類でまったく感情移入できないし、こんな陰惨な事件をサスペンス・アクションとして書くなどということはできそうもない。私にはストーリーテラーとしての才能はないが、もし書けたとしても常識の範囲内の人間像で造形し、陰惨な事件は陰惨な演出にしてしまうだろう。

「お前は俺か」と思うような作品も楽しいけれど、こういう自分の中にはまったくない思考を垣間見れる作品は本当に貴重に思える。

「話せばわかる」と言って殺された犬養毅の没年は 76 歳だそうだ。歳をとったからと言って必ず気付くものでもないらしい。たしかに気付かない方が人生は幸せそうではあるが。

 

JEF4J をリリースしてみた。あるいは、メインフレームの文字コードの話。

富士通社のメインフレームと連携する必要のある仕事があった。

仕事では単に使える文字のチェックだけが行えればよかったので、結果さほど知識は必要なかったのだけど、個人的に興味がありプライベートで調べていたら結構詳しくなってしまったので備忘録も兼ねて Java 用の JEF漢字文字コードサポートライブラリを作って公開してみた。*1

世代的なこともあるけれど、ホスト系はまったく触れたことがなくレガシーな文字コードには毎度苦労させられる。もちろん、構築するシステム自体はいわゆるオープン系なので、 UnicodeWindows-31JEUC-JP あたりが中心になるのだけど、移行元のシステムはレガシーなのでホストの知識がないと解決出来ない問題が発生することがある。

今回 JEF 漢字コードを調べることになり、まず驚いたのが、そもそも文字コード表が公開されていない、ということ。あったとしても、せいぜい 1990年以前に出版された辞書のように分厚い書籍だけだったり。

思うに、メインフレームを抱える各メーカーとしてはデータ移行自体も重要なビジネスとなっているため、なかなか公開しづらいところがあるのだろう。JEF4J では「JHT(ホスト連携ツール)SIMPLE版」からリバースでマッピングを作り、これをベースに拡張非漢字や後述の字体変更を反映したものを使用している。このツールがなければJEF4J は実現できなかった。*2

次に驚いたのが、Unicode ですらマッピング出来ない文字が多数存在するということ。*3古い文字コード体系だからと言って符号化文字集合自体は決していい加減なものではなく、むしろ公共機関でも安心して使えるぐらい幅広い漢字がサポートされている。

さらに驚いたのが(これはメインフレームのせいではないけれど) JISコードの標準字体の変更の酷さ。なんと全改定で字体が変更された文字すらある。

PC世代の人が馴染みある字体は 83JIS(新JIS)だが、メインフレームが開発されていた時代はそれよりも前なので、富士通の JEF、NECのJIPS、日立のKEIS いずれも 78JIS(旧JIS)をベースに開発されている。78JISと83JISでは一部のマッピングや字体が変更されているため、同じ JIS コードとはいっても単純に変換できない部分がある。*4

この問題に拍車をかけるのが JIS 2004 での字体変更だ。JIS 2004 では、83JISでの新字体への変更を旧字体に戻した部分がある。現在のフォントの多くは JIS 2004 標準字形をベースとしてはいるが、古いフォントの多くは 83JIS をベースにしている。過渡期の現在においては同じ文字をどちらにマッピングすべきか確定することができない(JEF4Jでは JIS 2004 字体を基準にしている)。

JIS 2004 での字体変更の経緯を知ると納得できないこともない(真の犯人は83JIS)けれども、互換性を破棄するこの決定はシステム屋の常識ではあり得ない選択だとは思う。とはいえ、もはや決まってしまった以上、JIS 2004 を基準にし、これ以上変えないことが重要だろう。*5

メインフレームは、インターネット以前の存在ということもあり、メーカーの協力なしにオープンな場所から情報を得るのが難しい状況にある。とはいえ、まだまだ現役で稼働しているシステムは多数あり、今後もデータ移行などで関わらざるを得ない人もいるのではと思う。そういう人たちの参考になれば幸いだ。

*1:単なる知識とは言え、仕事で仕入れた知識を Web で公開していると思われるとあらぬ誤解を受けかねないので、調査・開発ともに完全にプライベートで実施していることは強調しておきたい。実情を言うと、きっと仕事で使うだろうと思って先回りして調べていたら、結果そこまでのものは必要なかったというオチだったりする。結局、実機すら触ってない。

*2:JIPSやKEISもサポートしたかったがJEF漢字以上に情報がなく断念した。

*3:厳密に言えば、最近ようやく完全に標準化できた異体字領域まで使えば漢字のマッピングまではできるとは思う。

*4:サイトによっては JEF の基本漢字領域は EUC-JP と同じと書かれているが、実際には元規格の差異による違いがある。

*5:でもまだ幽霊文字が残っている……

「否定と肯定」と「正義と公正」と「PEZY Computingの社長逮捕」と

歴史学者ホロコースト否定論者の裁判を描いた「否定と肯定」を見てきた(なお、映画の内容に触れるためネタバレ注意)。

映画としては説明不足や淡白な演出もあり名作と言えるような出来にはなっていないのが残念だけれど、内容としては非常に面白い作品だった。見る前は、否定論者の陰謀論やデマを歴史学者が苦労しながら反証していく、という話なのだろうと思っていたらこれがまったく違う。

どうも、ホロコースト自体は多くの証拠があるものの、ドイツ軍が国民に隠して秘密裏に実施した上、敗戦時に証拠隠滅を図ったことで、ヒトラーの命令書など直接的な証拠があまり残っていないようなのだ。もちろん、だからと言ってホロコーストが捏造などということはない。生き残った人もいれば、虐殺に協力させられた人々の証言や文書、施設の残骸も残っており、多面的に見れば、歴史的な事実であることは疑いようがない。

だから、裁判の争点は「ホロコーストを否定する言説も成立しえるか」という点に絞られてくる。ホロコースト否定論者のアービングは「ヒトラーの命令書が存在しない」など否定する余地があると主張する一方、歴史学者デボラの弁護チームはアービングホロコーストの存在をわかっていて主義主張から意図的に証拠を捻じ曲げていると主張することで応戦する。

この映画の面白いところは、これで終わらないところにある。最後半になって裁判官が「否定論者が純粋に自説を信じているのならそれは嘘とはいえないのではないか」と言い出すのだ。正直、演出が下手で単にものわかりの悪い人のように見えてしまうのが残念なのだけれど、裁判官の心中を察するに「アービングの主張がデマなのはわかっている、しかしアービングの立場に立って公正に考えるなら、必ずしも悪とは言えないのではなかろうか」と考えた上で、弁護チームにそれに対する反論を用意しているかを確認したと捉えるべきだろう。

たしかに言われてみれば、それもひとつの立場だ。「言論の自由原理主義」に立てばどのようなデマも暴言も「そう思った」という事実を発露したに過ぎない。しかしながら、もしそれを認めてしまえば、真実とデマを両論併記する口実を与え、結果的に「ホロコーストはあったかもしれないしなかったかもしれない」という空気を作り出してしまう。そして、ネオナチを増長させ別の大きな出来事に繋がってしまうかもしれない。公正であることは必ずしも正義とは言えない。

ここで「OJシンプソン事件」の裁判を思い出した。この裁判ではOJシンプソンが妻を殺害したのはあきらかであったものの、OJシンプソンを有罪にすると黒人コミニティによる暴動が発生する可能性が高い状況にもあった(3年前に無抵抗の黒人を白人警官が暴行した事件があり、無罪になったことで暴動が起こった)。刑事裁判では、優秀な弁護チームのおかげでOJシンプソンは無罪を勝ち取ったものの、民事裁判では決定的な証拠が発見され有罪となっている。

弁護チームは脇に置くとして、損得だけで考えよう。公正に考えるなら、OJシンプソンは有罪にするのが当然だ。しかし、それによって暴動が発生し街にひどい被害が発生しまったく関係ない人々が苦しむことを考えれば無罪にすべきかもしれない。簡単にどちらが正しいとは結論が出せない。

さて、「PEZY Computingの社長逮捕」である。

もちろん真相は藪の中だということは前提だけれど、「特捜が調べているのだからよほどひどいことをしているのだろう」と考える人が多数おり、「犯罪は犯罪なのだから、天才だから助けろなんて問題外」などの主張をよく見かけるで、そういう捉え方は大変まずい、ということを記しておきたい。

まず、特捜が特殊な役割であることを認識すべきであると思う。

「違法は違法」なのであれば、普通に警察が捕まえればよいだけで、特捜が手がける必要はない。特捜が手がけるのは、政治的に壁があったり、専門的であったり、特別なものだけだ。

しかしながら、このことが「特別なもの」⇒「特別な成果を上げる」⇒「社会的に目立つ人物、団体をターゲットにする」というロジックに繋がり、本末転倒な事件化に繋がることがある。

一番有名なのは「障碍者郵便制度悪用事件」の村木厚子さんの冤罪だが、罪に対して罰が重すぎる堀江貴文氏の「ライブドア事件」、結局たいした罪を見つけられず無罪になった小沢一郎氏の「陸山会事件」、政権にもまったく繋がらなかった「森友学園事件」、罪のない安部英氏を主犯であるかのようにでっち上げた「薬害エイズ事件」、なぜ検察が扱う必要があるのかわからない「野村沙知代脱税事件」など、問題のある事件化も非常に多い。

しかも、特捜としても事件化を正当化する必要があるため罪を大げさに表現しマスコミにリークしたり、プレッシャーをかけるため親族や知人も取り調べ対象とすることがあり、最終的に問題がないとわかった場合でも名誉が回復されないのが実情のようだ。相手が国の捜査機関だけに民事裁判で賠償請求するのも難しく、関係者はただ人生を破壊されただけで終わってしまう。

「犯罪は犯罪」と言う人は Winny 事件や微罪逮捕を調べるべきだと思う。日本の捜査機関には大きな裁量権が与えられている。正しく運用されれば犯罪を早急に解決することに繋がるけれども、不適切に利用されれば 21 世紀とは思えない人権侵害になってしまう。

普段であれば見過ごされているような細かい不法行為でも、ひとたび捜査機関のターゲットになればすべてが黒になってしまうというのはとても怖いことだ。例えば、Twitter で見かけた話では NEDOの資金で買ったコピー機で講義資料を印刷すると規定外支出に問われるそうだ。犯罪は犯罪というなら詐欺罪で起訴されるべきということになる。

「公正」であることは、必ずしも「正義」ではない。文脈を無視した「公正」は、悪にもなりかねない。

現時点では、なぜ逮捕されたのかよくわからないところはあるけれども、噂されているように政治がらみのタレコミに繋がりそうだから「スパコンに使うメモリ開発資金をスパコンに流用して詐欺」ということにして事件化したのだとしたら、本当に何をやっているんだ、という話だ。

過去にライブドアに対し劇的に捜査に入り新興市場を壊滅させた実績があるだけに、技術とか経済に対する事の軽重がわかっていないのかもしれない。目立つ成果が挙げられるなら、事件の軽重は問わないという姿勢なのであれば、今後も同様のことが続くことになる。

結果はどうあれ、今回の事件で、多くのベンチャーが国から助成を受けることに消極的になるだろう。ただでさえ、日本発のイノベーションが目立たなくなっている状況なのに、わざわざ自滅の道を選ばなくともいいものを。

安部英医師「薬害エイズ」事件の真実

安部英医師「薬害エイズ」事件の真実

追記:そういえば、この「否定と肯定」、ぜひ慰安婦問題をネタに日本で翻案映画作って欲しい。慰安婦問題については各歴史学会から『「慰安婦」問題に関する日本の歴史学会・歴史教育者団体の声明 - 東京歴史科学研究会』という声明が出されており、うってつけだと思う。