hidekatsu-izuno 日々の記録

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

褒めるべきか叱るべきか、それが問題だ(続)

以前、「褒めるべきか叱るべきか、それが問題だ。」というエントリを書いた。ただ、そのときにはうまく考えをまとめることができず書けなかったことがある。それは、「怒らないためには期待しなければよいのではないか」という点だ。

昨今、「アンガーマネジメント」という言葉が流行っているが、その方法論のひとつに「こうあるべきを手放す」というものがある。私自身を振り返って、なぜ自分は怒りの感情を持ってしまったのかと自己分析すると、ほとんど「期待したとおりに相手が行動しなかった」場合だったと思う。相手に対し怒りを覚えるのは、当然それ相応の期待や予測が存在するからで、そこに何らかの期待がないならば、怒る理由自体がそもそも存在しない。

だから、怒らないためには、いかに「期待を持たないか」ということが重要になる。とはいえ、一方で「期待を持たない」ということは、果たして良いことなのだろうか、という疑問もある。期待というのはある種のこだわりの表れであるし、こだわりというはその人が伝えたいことであるわけだから、重要な事柄なはずだ。自分がこだわっている事柄を相手に理解してほしいからこそ期待するのだろうし、その結果として伝わらないことに憤りを覚えることになる。

なぜ今回、2015年のエントリの続きを書こうと思ったのかと言うとPodcastTuring Complete FM」の30回の最後で、まさにこの話が議論されていたからだ。

Rui「思うんですけど、教えるときに厳しすぎる人が多いなというイメージがあり、自信を失わせる方向で教えるのではなく、自信を増やす方向で教えるほうがいいんじゃなかなって」

hikarium「自信を失わせるのは本当に良くない。最初にできないのは悪いことじゃないですもんね。」

Rui「できないから逆にいるわけですからね。」

hikarium「できるんだったら来なくてよいので。だから、できるようになっていこうとしている人には本当に優しく接してあげるというか。当たり前のことですけど。」

Rui「hikarium とかちょっと厳しいときもありましたよ。」

hikarium「すみませんでした。たまになんか、てか、結構言われるんですよ。hikariumはスパルタだからって、たまに言われるんですよ。」

Rui「別にそんなつもりはないんでしょう?」

hikarium「あ、いや、ちょっとスパルタっぽくしているときはあります。でも、それは意図したものです。」

Rui「じゃあ、それをやめればいいんじゃないですか。それを。」

hikarium「でも、今回は……今回もちょっと駄目でした?」

Rui「僕はhikariumを知っているから、hikariumなみに優しくしているのかな、と。」

hikarium「いや、難しいですよね。」

Rui「まぁ、でも、それは、それこそ訓練じゃないですか。教え方と言うかテクニックがあり。心構えというよりはむしろテクニックですから。」

hikarium「あーなんか、自分が教えているのは、できそうな人を教えているので。だから、ちょっと期待値を高めに投げているので。それがちょっとスパルタっぽく見えるのかなっていうのがあるかもですね。外から見ると。」

Rui「別に期待しなければいいんじゃないですか。それはなんか言い方の問題だけど。別にこれくらい教えたんだから、これくらいできるだろう、と思わなければいいんじゃないですか。」

hikarium「たしかに、それもあるかも。せっかくだからいろいろやってほしいじゃないですか。まぁ、そうですね。高い目標を立てるというよりは、少しずつできる目標を立てて、それができたらすごいっていうことを言ってあげて自己肯定感を高めてあげるのは本当に大事なことかなと思います。」

Rui「本人が目標を立ててそれを達成するのはいいですけど、別にこっちがそれを期待する必要はないですからね。これくらい教えたから、これくらいできるはずなのに、なんでできないんだ、と思っても仕方ないから。」

hikarium「なんでできないんだという思考が一番危ない。」

私も歳をとったからかもしれないけれど、今となっては Rui さんの言うことがよくわかるし、若いときには hikarium さんに近い気持ちを持っていたな、と感じる。

一般化できるものなのかはわからないけれど、年齢と共にある種の尖った部分は減ってくるものだとは思う。若い頃には自分の考えは他の人にも理解できるものだ、という誤解があるけれども、多くの経験をする中で、世の中にはいろいろな人がいて、いろいろな考えを持っていて、そして必ずしも自分の考えが正しいとも限らない、ということがだんだんとわかってくる。そして、期待をするという概念自体、実はどうでもいいことなのではないかということに気付いてくる。

結局のところ、教育の結果などというものは教えられた当人次第なのであって、教える側がどうこうできるものではない。ようは「馬を水辺に導く事はできるが馬に水を飲ませる事はできない」ということだ。教える、ということは教えられた当人に伸びる”きっかけ”を与えるに過ぎない。そういう意味で期待をすること自体、余計なことなのかもしれない。

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:でもまだ幽霊文字が残っている……