統計的学習理論(1): フィッシャー情報量とクラメールラオ下限と最尤法

勉強したことメモ。数式を使わずに書く。

また、行間をスキップせずに、多少くどいかもしれないくらいにきっちり順を追って説明を書いたので長いけどわかりやすくなっているはず。

第一回はベイズの手前まで、最尤法のあたりまでの話をする。

推定量

データを表す確率変数があってその密度関数は何らかのパラメータであらわされているとする。観測したデータから合理的にパラメータを決定するタスクのことを推定という。

推定を世界で最初にガッチリ研究したのはフィッシャーという人で、彼は推定方法の良しあしを判断する基準として、(A)不偏性、(B)有効性、(C)一致性、(D)漸近正規性、(E)十分性、などを考えた。

データからパラメータを推定する手続きは、データの関数として表せる。そういう関数を推定関数、そうやって計算した値を推定量と呼ぶ。

観測されうるデータは確率変数なので、推定量も確率変数となる。

推定量が確率変数だってのは当たり前のことであえて言うべきことでもないと思うかもしれない。しかしこれは重要なことだ。なぜかというと推定量が確率変数であるならば、何か実験をしてデータを観測するという行為をせずとも、推定量の良しあしは理論的に評価できるということになるからだ。これがすごく大事。

そういうわけで、実験をやってみてその都度ケースバイケースでパラメータ推定値の良しあしを評価するというのではなく、あらかじめ理論的に推定関数のレベルで良しあしを評価しておくことによって「パフォーマンスが既知なパラメータ推定フレームワーク」が作れるってことになるのだから期待を持って議論を進めよう。

もともと設定した「データを表す確率変数」には何らかの密度関数が付与されているのであった。なので推定量はその密度関数を使って(そういう関数をネストして計算する値として)表現されるはずだ。

つまり推定量はデータの密度関数とパラメータの推定関数によってあらわされる。後者の推定関数はパラメータ推定のやりかたによっていろいろバリエーションがあるだろうが、前者の密度関数は実験を行う前に何らかのモデル化を行って決めてあるはず。よってデータの密度関数は既知として議論を進めてOKだ。

推定量の良しあし:フィッシャー情報量

じゃあデータの密度関数があるとして、「推定量の良しあし」を評価する方法はないだろうか。なんらかの指標を使って、その指標が大きいか小さいかで良しあしを計れないだろうか、というのが次の課題となる。

で、フィッシャーはうまい指標を編み出した。

  • データの密度関数の対数をとり、パラメータで偏微分する。これをスコアと呼ぶ。
  • するとスコアの期待値は理論的にゼロとなる
  • スコアの分散は定数にはならないが元の密度関数を使って表せる
    • この「スコアの分散」をフィッシャー情報量と呼んでおこう

つまり「スコアの分散」という指標が「推定量の良しあし」を評価するのに都合がよいようなのだ。その根拠は以降で見てゆく。

その前にちょっと補足しておく。まずこのスコアと、フィッシャー情報量についてもう一度念押ししておきたいのは、「ここまでパラメータの推定方法についての議論なし」という点。つまりスコアやフィッシャー情報量というのは元のデータをどうモデル化したかには依存しているが、パラメータ推定をどうやるかについては特に触れずに定義した数量だということに注意しておきたいのだ。

また、スコアもフィッシャー情報量も、「データとパラメータの関数」であることにも注意しておきたい。今やっている作業は、上述したように実験を行ってデータを観測したときに使えるようなフレームワークを理論的に作っておくという作業であった。なので実験を行うと、スコアやフィッシャー情報量には具体的なデータの値が代入されて「パラメータの関数」になる。であれば今フレームワークを作っている段階ですでにデータはあるものとして議論を進めちゃっても同じことだ。スコアもフィッシャー情報量も(観測データを想定として含んだうえでの)「パラメータの関数」として考えて先へ進もう。

推定量のばらつき:クラメールラオの不等式

さて、補足はここまでにして、議論をもどそう。上で半ば天下り的に定義した「フィッシャー情報量」は具体的なパラメータの推定方法についてなんにも言ってないにも関わらず推定量の良しあしを評価するのに使えるという話。それはクラメールラオの不等式というものだ。順を追って説明しよう。

上のほうで少し述べたが、パラメータの推定量というのは確率変数なのであった。なので「実験する→データを観測する→パラメータ推定値を算出する」というのを何セットも繰り返せばそのパラメータ推定値はあるばらつきをもったサンプルとして集まるだろう。

ここで少しだけパラメータの推定方法に条件をおく。すなわち「そうやって集めたサンプルの期待値がもとのパラメータと等しい」という条件。この条件を冒頭のほうで述べた(A)不偏性と呼ぶ。

ちょっと脱線:正規分布の母分散の推定についての注意

この不偏性についてまた紛らわしい話がいくつかあるので、ちょっとここで脱線気味になるが整理・補足をしておく。まず、ここで「パラメータ」と呼んでいるものについてだが、もし元のデータの密度関数が正規分布だとしたらパラメータは正規分布の母平均と母分散ということになる。つまりパラメータは母平均かもしれないし母分散かもしれない。もちろんその両方のペアでもよい(ただここまでパラメータはスカラーとして話を進めてきたので、フィッシャー情報量はスカラー量としている。パラメータが複数の変数すなわち多変量だとしたらフィッシャー情報量はフィッシャー情報行列になる)。

推定したいパラメータが正規分布の母平均であれば、不偏性という条件を満たす推定方法は簡単に作れる。毎回の実験で「実験する→データをN個観測する→N個のデータの平均(標本平均と呼ぶ)をとる」とやればいい。そうすれば実験を数セットやって得られる推定値たちは不偏性を満たす。

推定したいパラメータが正規分布の母分散だったときはちょっとややこしい。単純に毎回の実験で「実験する→データをN個観測する→N個のデータの分散(標本分散と呼ぶ)を求める」とやってしまうと、不偏性を満たさなくなってしまうのだ。それはなぜかというと、標本分散を計算するにはまず標本平均を計算して、各データの平均からのずれを計る必要があるのだけど、そのときに平均(つまりそれも推定量なので確率変数だ)の分だけ自由度が一つ減ってしまい、標本分散としてNで割ると分母のほうが1つ多くカウントされた状態で分散を母分散より低くみつもってしまうのだ。例えば、仮にN=2だとしたら、標本平均はその2つのデータのちょうど半分のとこだ。なので標本分散は「2つのデータの間隔の半分の2乗」の2つぶんだ。それをN=2で割ってしまうと、「2つのデータの間隔の半分の2乗」が残る。これはばらつきとしてはずいぶん小さく見積もってしまっている。この場合Nから1を引いてN=1で割らないといけないのだ。Nで割る代わりにN-1で割る推定方法を不偏分散と呼ぶ。

まとめると、正規分布のパラメータの不偏推定量は、母平均はなんも考えずに標本平均でOKだが、母分散はNじゃなくてN-1で割る不偏分散というのを使う必要があるので注意が必要だ、ということだ。

そういう風に、1回の実験におけるパラメータ推定値の算出方法の話と、そういう実験を何セットもやったときに各実験(そういうのを「試行(トライアル)」とよぶ)を総合してみたときにどうなるかという話で、レイヤが一つ違うってことを意識してないと混乱するのでそれも注意が必要なのだ。

さぁ、脱線はこのくらいにして、また本題にもどろう。

不偏性と有効性、そのトレードオフ

不偏性すなわちサンプルの期待値がもとのパラメータと等しいという条件が満たせたとする。実験を何セットやっても平均はちゃんと偏らずにいてくれることが保証されているわけだ。じゃあ推定値のばらつき、つまり分散はどうなるのかという議論が次に来るのは自然だ。

実はこの推定量の分散のほうは、不偏性の条件を置いただけで自動的に下限が決まってしまうのだ。その下限とは、「{データの個数×フィッシャー情報量}の逆数」である。これをクラメールラオの下限と呼ぶ。

どんなパラメータ推定方法であってもそれが不偏性を満たしているだけで、繰り返し実験を行ったとしても最低でもクラメールラオの下限の値だけバラつきが出てしまうのだ。もちろんそれ以上にばらつきが大きいようなイケてない推定方法もありうるし、バラつきを抑えようとすると今度は不偏性を満たすことができなかったりしてしまう。まさに、あちらをたてればこちらが立たず、という状況だ。

とりあえず、クラメールの下限を満たす推定方法はバラつきという観点では優秀と呼べるので、名前を付けておこう。バラつきが下限と等しくなるような推定量を冒頭で述べた(B)有効性を満たす、有効推定量と呼ぶ。

不偏性は推定量の平均についての条件、有効性は推定量のバラつきについての条件なので、それぞれはトレードオフの関係になることもある。

さて、推定量の良しあしを判断する尺度としてフィッシャー情報量、不偏性、有効性、という概念を導入してきた。ではせっかくなので具体的な推定方法についても何か汎用的なフレームワークを作っておこうではないか。

それはなるべくシンプルなものがいいだろう。そしてそうやって作った推定量について、不偏性や有効性がどうなるかを予め調べておこう。もしそれが不偏性や有効性という条件をうまい具合に満たしてくれてたら、もちろん嬉しいことだ。

そんなに万能じゃない気もする!?:最尤推定

フィッシャーは考えた。とりあえず超簡単に「実験する→データをN個観測する→もとのデータの密度関数に観測データを代入して出来上がる『パラメータの関数』が最大になるようなパラメータを求める」というのはどうだろう?

この推定方法を最尤法と呼び、そうやってもとめる推定量を最尤推定量と呼ぼう。

上のほうでパラメータが正規分布の母平均や母分散のときの話を少し脱線気味にしたが、そのときに挙げた標本平均と標本分散はこの最尤法の枠組みから導き出すことができる。それについて不偏性と有効性を検証してみよう。

まず正規分布の母平均の最尤推定値として標本平均はもちろん不偏性を満たす。そして実は有効性も満たすのだ。つまり母平均を推定する推定方法の中で分散が最小になる。母平均の推定において最尤法のパフォーマンスは実にすばらしいとわかった。

では正規分布の母分散の最尤推定値のほうはどうか。それは標本分散ということになるが、上述したとおり不偏性は満たさないのだ。よって有効性についての議論もケースバイケースになってしまいそうで難しい。どうやら母分散の推定における最尤法のパフォーマンスは芳しくないような気がする。

しかし、最尤法のシンプルさを見るに、かなりの汎用性を秘めていると思われるフシもある。だったら最尤法がもつ真価をもう少し吟味してあげようではないか。

そうやって考えていくと、一致性と漸近正規性というのが浮かび上がってくるのだ。

最尤法のいいところ:一致性と漸近正規性

最尤推定量は正規分布の母分散みたいな基本的なところでさえ不偏性をみたさなかったりするのであったが、視点を実験の回数を重ねるところではなく、一回の実験で採取する観測データの個数のほうに向けてみよう。

正規分布の場合、1回の実験でとる観測データの個数をどんどん増やしていくと、標本分散の値は限りなく母分散に近づいてゆく。もちろん母平均の方もだ。

そして、正規分布のパラメータに限らず、最尤推定量はちょっとした条件は必要となるが、基本的にはデータの個数が無限にあればその推定量はかならず元のパラメータに一致する。なので、実験を繰り返さなくても、観測データが無限にあれば実験は1回やるだけで真のパラメータがビシっと求まってしまうのだ。

…なんかオカシイこと言ってませんかとツッコミ食らいそうな論法だけれども、これが(C)一致性という性質なのである。1回の実験でデータの数を無限に観測できれば実験1回で済むって、そりゃ当たり前じゃないか、何言ってんだオマエって思われるかもしれない。

けど、ここで注意しなければならないのは、今作ってるのは「フレームワーク」なのだ。つまり、1回の実験で観測データの数がたくさん取れるような問題設定の場合と、観測することによって対象物に影響を与えてしまってあんまり観測データをたくさん取れないけどリセットして何度もトライアルを繰り返せる場合と、そういう状況に合わせて使えるフレームワークを作ろうとしているのだ。

だから、最尤法が活きてくるのはこれこれこういう条件のときですよ、というのをハッキリさせておくことは、その条件がちょっと紛らわしかったとしても本質的に重要なことなのだ。

さて、一致性についてはそういう感じで納得することにして、最尤推定量にはもう一ついいところがある。それが(D)漸近正規性だ。これは何かというと、一致性について述べたような観測データの数を増やしていくと推定量が真のパラメータに近づいていくだけでなく、データの分布自体つまり適当に区間を区切った時の度数分布の形状が正規分布そのものに近づいていくという性質があるのだ。

しかし、そもそも一致性があるのだから、漸近正規性によって正規分布の形になるといってもどんどん針のようにとがった正規分布になるだけでその形が正規分布と同じかどうかなんてそんなに意味のあることじゃないじゃないか、とアナタが思ったとしたらアナタはisobeと同じくらい頭がよく、そしてisobeと同じくらい頭が悪い人だと思われる。では次の段落を読む前に、この漸近一致性の嬉しさについてちょっと考えてみてほしい。5〜10分くらいで私と同じ答えが出てきたら、やはりisobeと同レベルの頭脳の持ち主ということになるだろう。

私の考えは、こうだ。確かに一致性がある限りデータが増えれば針のようにとがっていくので針は針であって形状は関係ないのはそうなのだ。拡大すれば正規分布になるとかもそんなに本質的に嬉しい話ではない。むしろ問題は「すそ野」のほうなのだ。正規分布というのは「2乗の指数関数」という裾野の減り方が非常に激しい分布なのだ。つまりそれがどんどん尖っていくということは針の近くにあった裾野が激しい勢いで密度を失っていくということなのだ。

ちなみに本当の答えは、こうだ。正規分布どうしの比で考えた場合にどうなるか。尤度比という統計量を計算することで「検定」ができるようになる。漸近正規性があると尤度比がカイ二乗分布に収束するという性質が導かれるため、検定を行うときに強力な武器となるのだ。こちらを想像できた貴方はisobeよりも頭脳と見識が優れた方だといえるだろう。漸近と聞いて検定問題がパッと思い浮かぶというのは良いことだ。

十分性、特異モデル、そしてベイズ推定へ

さて、推定量について冒頭で挙げた(A)〜(D)についての説明をした。残るは十分性というテーマだが、これはもう少し色々面白いことがある上に、ベイズ推定との面白い関係性もあるので回を改めて説明しようと思う。

そして、次にくる話はフィッシャー情報量が不定となるケースだ。本記事ではフィッシャー情報量はスカラーとして考えていた。まずそれがゼロになってしまうケース、つまりクラメールラオの下限が無限に発散してしまうケース、そしてパラメータ空間が多次元、つまり多変量解析の世界についてフィッシャー情報行列を考え、それがランク落ちするケース、そういうものを考えていく。

では、次回また。

身体を軽視しすぎてる現代人

今日もオフィスで目覚めましたー!起き抜けにポワワワンとブログネタ浮かんだんで書きますね。

  • 「俺、努力しようと思ってるんだけど出来ないんだよ。。」
  • 「彼女を信じてるし確かに気持ちは僕に向いてるのにしょっちゅう浮気するのナゼ??」
  • 「あいつ貸した金を返すの遅すぎ。でもいつも本当に返す気はあるのは伝わるんだよな。。」
  • 「おぼかた先生は真剣に研究してそうだし、多少の詰めの甘さは大目にみていいんじゃね?」

みたいな話に共通する思想についてです。面白そうでしょ。え、思想とか哲学とか興味ない…?だったら速攻ブラウザ閉じろくぁwせdrftgyふじこlp*1

ココロとカラダは一体である。じゃあどっちが強いのか?

(冒頭の話とは全然関係なさそうな問いでアレレ感があるかもしれないけど、まぁ黙って読めば面白くなってくるぜよ。)

答えは、カラダである。人間、ココロよりもカラダのほうが先に出来上がって生まれてくるのである。自分が赤ん坊だったころのことを覚えてますか?覚えてないでしょう。でもおしっこを我慢したりウンチを我慢したり(排泄のコントロールのことね)、液体を飲んだり固形物を噛んだりするという運動については大人になったいまもきちんとカラダに根付いている。

ふだんの生活で我々は自分の心がいつもすぐそばにあるので、意志の力でその心をコントロールすることが身体をコントロールすることに直結するような気がしている。もちろん確かにそれはそうなのだ。子供のころから身体につけてきた基本的な動作というのは、意志の力で心をコントロールすれば連動して身体まで動きが及んでくれる。実にスムーズに。

しかしそのスムーズさを支えているのは、身体のほうなのだ。身体にしみついてる動きだからこそ、ココロで思ったことがカラダに直結してくれるのだ。だからもしカラダのほうに準備がない何かをやろうとしたら、ココロだけでどうにかすることは難しい。

本当はカラダが先でココロが後

ヨガという精神・身体の一体訓練法がある。最近は美容エクササイズとしての評価が定着してる感もあるけどそれは2000年代に耷出版というマイナー雑誌が出したヨガ雑誌が著名人の間で話題になってそこから一気に広がっただけの最近できた文化で、もともとは90年代とかはオウム真理教とかに象徴されるような精神と肉体の訓練思想だ。

僕もヨガの専門的なことはあんまり知らないのだけど、カラダが先でココロが後、という思想にもとづいて両者の向上を図る体系的訓練法だっていう認識を僕は持っている。そして恐らく、その認識は正しい。

例えばヨガがストレス解消とかに効果があるという点はロジカルに納得できる。つまり、普段我々は現代社会において身体的な動作をある制限されたカタチでしか発揮できないような生活を送っている。PCに向かってカタカタやって電車に揺られてスーツ着て人と話す、そういう動作だけでは人間に本来備わっている身体性のすべてをカバーできないのだ。そして人間の脳や精神系統というのは、原始時代に狩りや採集をして暮らしていたころに最適化されたまま、今でもそんなに変わっておらず、ゆえに身体動作の制限は精神の制限につながっているためそのズレがストレスとして溜まっていったりする。なのでそのズレの解消は、ヨガのような身体の可能性を系統的に発揮するプロセスによって十分になしえるだろうというわけだ。*2

カラダが支配する範囲はかなり広い

借りた金をなかなか返さないというのは、一見ココロの問題に思える。けれども、それは違うのだ。心で思ったことが行動として実現しないケースというのは、ほとんどはカラダの問題なのだ。

一見、「お金」というのは人間社会が生み出したもので、動物社会とくらべると幾分抽象的なコンセプトであり、人間の精神のたまものだというイメージがある。それは部分的にはそうなのだけれども、お金というコンセプトに占める身体性は実はかなり大きい。

抽象的な概念というのは、その基礎にある具体性が身体と一体となって初めてリアリティを持つ。お金というのはけっこう抽象的なわりにリアリティの強いコンセプトだということは納得されるだろう。だからつまりお金に占める身体性というのはかなりのものがあるのだ。

だから「お金を返さない」という行動の傾向というかまぁ習慣は、その習慣を持つ人にとってお金がもたらしうる「効用」の具体性がどれだけ身体的かと連なる程度に、カラダの支配を受けている。もしお金に対する認識がすごくバーチャルな人、霞を食って生きているような仙人みたいな人がいて、その人が「借りた金を返さない」ということがあって、しかも何かお金に別のシンボリックな精神性を見出してそれに引きずられているとかでもない、そういう条件があって初めて「単純にズボラな精神の持ち主」だという結論づけが妥当性を帯びると思う。

ここで挙げた「お金」はそういう風に身体性がとても大きい部類のものなんだけど、人間が精神的に操っていると思われるさまざまな概念はすべて、程度の多少はあれど身体性を帯びている。だからいろんなココロの問題とされがちなもの、意志や意識の問題と思われがちなものの多くは、そういうカラダの認識をもう少し考慮に入れることでより有効な対処対策が見えてくることが増えるんじゃないかなって思う。

カラダを意識することで見えてくるもの

冒頭で挙げた「俺、努力しようと思ってるんだけど出来ないんだよ。。」というのであれば、その努力したいテーマやなりたい理想像に含まれるコンセプトにいったん分解して、そこに含まれる身体性を考えてみるといいかもしれない。そうすれば朝早く起きて勉強するという目標を立てたのに全然できないということがあるならば、めちゃくちゃおいしいモーニングの喫茶店へいくとか、かわいい女の子にバイト料を払ってモーニングコールと進捗報告を習慣づけるとか、身体性にもとづく対策がうまくいくかもしれない。

「彼女を信じてるし確かに気持ちは僕に向いてるのにしょっちゅう浮気するのナゼ??」ということであれば、セックスをもっと少しちゃんとやるとか、逆に浮気を許容しない強い態度を見せるとか、そういうことかもしれないし、女性視点で彼氏が浮気性だったら自分をもっとエロく見せるとか手料理の腕を磨いて胃袋をガッチリつかむとかが有効な対策として浮かび上がるかもしれない。

「おぼかた先生は真剣に研究してそうだし、多少の詰めの甘さは大目にみていいんじゃね?」という話であれば、実験プロセスや評価制度や研究者間の御恩と奉公みたいな関係性の見直しとかいう部分に本質的な対策が隠れているのかもしれない。

というわけで

まぁそんなところです。

*1:睡眠不足の朝は大体いつもこんな感じです。あ、こんな僕を手伝ってくれる優秀な学生アルバイト募集してまっす。

*2:僕は20代のころはこういうテーマを初めとするいろんな思想のことばっかり考えていたのですぜよ。

データ拡大はギブスサンプリングと比べて何が嬉しいのか

照井伸彦著「ベイズモデリングによるマーケティングデータ分析」をざっくりと読み終わりました。

感想としては

です。あと僕はこの手の本を読むときはという感じです。

さて、この本のなかでデータ拡大というテクニックが出てきておおーって思ったのですがR勉強界隈の講師的存在である大仏様のエントリ

でうれしさがわからないという話があったので自分なりにうれしさを考えてみました。*1

データ拡大の嬉しさ

データ拡大はf(x)のxがデータなのかパラメータなのかを問わないサンプラーという視点で見るとあんまりうれしくない気がしますけど、確率変数それぞれにパラメータと観測データの区別があるときにうれしいのかなって思います。

例えば、パラメータがΘでデータがxだとしてベイズ推定によって事後分布P(Θ|x)を構成してサンプリングしたいときにΘを直接サンプリングするのが難しいケースがあるとします。
もちろん、Θが多変数で、Θ内部で変数群を分割することによってギブスサンプリングができるケースであればそうすればいいですが、Θに含まれる変数はもっとガッチリこんがらがっていて条件付き分布にバラせないとします。

そういうときに拡大データyを用意して、P(Θ,y|x)として上記の本や大仏様の記事にあるようにP(Θ|x,y)とP(y|Θ,x)という条件付き分布でギブスサンプリングっぽくやればOKというのは大仏様の説明のとおりです。

で、その条件付き分布ですが、典型的には簡単になるというところがポイントだと思います。まぁ、変数を増やしたのだから増やした分ともとの分は条件付き確率がばらせるというのは当然といえば当然だとは思いますけれど。

いちおう、その当然と思われることを念のため確かめておきましょう。

もともとデータxは目的変数x1と説明変数x0にばらして「x1=すごく複雑な関数f(Θ,x0)」みたいになっているとして、yのモデルのほうはΘをパラメータとする単純な回帰「y=Θ*x0+誤差(*)」にするとします。そうすると、求めたい条件付き分布のP(y|Θ,x)とP(Θ|x,y)は、いずれもベイズ回帰モデルのサンプリングそのものになります。ここで仮導入した回帰モデル(*)においてyはあたかも観測データであるかのように扱えることがポイントで、前者のP(y|Θ,x)は、パラメータが分かっていればそのモデルで説明変数から目的変数をサンプリングできて当然ですし、後者のP(Θ|x,y)は観測データからパラメータの事後分布を求める普通のベイズ推定です。またこのとき、後者のP(Θ|x,y)はもとの複雑な関数を考慮せず(*)だけを使って計算できる、つまりP(Θ|x,y)=P(Θ|x0,y)となるところもポイントでしょう。

そういう風にして、パラメータの事後分布を構成しても複雑で直接サンプリングできないようなときに、より単純なモデルでデータを増やすと、その増やしたデータで「パラメータ→データ」と「データ→パラメータ」は簡単にできて、それがもとの複雑なモデルにおけるギブスサンプラーとみなせる(拡大したデータはもとのモデルの隠れパラメータという位置づけになる)、ということだと思います。

まぁそういう意味では大仏様のいうとおり新しい理論構成を導入したというものではないですけど、既存のものの組み合わせですごく嬉しいテクニックがあるので名前がついている、みたいなノリなんじゃないでしょうかね。

*1:ちなみに、大仏様の「究極のサンプラー」という理想はすごくわかります。それができたらめちゃくちゃうれしい。

研究とビジネスの共通メソドロジー

最近自分の「興味ドリブン」な生活がまずいと思い、やり方を変えるヒントを得ようとして3年ほど前に購入して一度読んだ安宅和人著「イシューから始めよ」を再読した。

それで思ったこと。

この本を要約すると、つまり研究やビジネスにおいて成果を出すには、意味のあるテーマを設定して検証可能な手段で実施して強いメッセージでまとめる、という一連のプロセスがあるということ。

テーマを設定して仮説を立てるぶぶんは研究もビジネスも一緒で、違いは検証方法にある。

科学実験であれば、仮説を検証できたかどうかを「評価する方法」は研究テーマによって色々あり得る。その評価方法にしたがって検証手段が編成される。

ビジネスの場合、仮説が正しかったかどうかを「評価する方法」は、収益という明確な統一基準がある。なので、検証手段としては「仮説が正しければ収益増という事象が観測出来る」ようなものを選べば良い。

例えば、消費増税によってコンビニの売り上げが減る、という仮説を立てたならばそれが正しかったときにもっとも儲かるようなアクションを検証手段として選ぶ。この場合なにがいいだろう。増税前にコンビニの株を空売りしておくというのは考えられるが、株取引では参加プレイヤが同じ仮説で動いていた場合には仮説が正しくても大きな鞘を取れないという性質がある。また証券市場はもっと複合的な要因で動いているため、一つの仮説がどの程度価格変動に寄与するかはその都度異なる。つまり株取引による収益で検証するのは仮説検証の弁別性が悪い。それに消費増税による消費落ち込みの検証は、インパクトが持続する期間が不明だと言う難点もある。そうやって、この仮説は検証手段に乏しいということが分かったらその仮説は不採用になる。もちろん自分が他のビジネスプレイヤと比べてその仮説を検証するにあたっての何か特別なアドバンテージを持っているのであれば良い仮説ということになる。

ここまで、本に書いてある事をそのまま言い換えてるだけなんだけれども、アドテクやマーケティングデータ分析といったビジネスに関するテーマでそういうことをきちんとやろうとしたら、ググっても出てこないので自分で考えるしかないなぁと。

テクノロジを追っかけていいものを作るのは簡単とは言わないけどテーマさえ明確であれば何でも作れる自信が僕にはある。けれど、戦略的に必要とされるプロダクトを作って売っていく、そういう起業家の本質的なスキルが僕にはまだないので、あと3ヶ月で2期目が終わりますが頑張らないと。

まとまらないですが、そんな感じで、仕事に戻ります。

複数のカテゴリ変数同士の相関を一気に可視化する方法

複数のカテゴリ変数があって、それらの相関をみたいときクラメールの連関係数というのが便利です。

カテゴリ変数の間の相関をまとめた変数をざっくり取り出したいときは因子分析というのを使うことが多いと思いますが、ここでのテーマはその因子分析とかを適用する手前の「まずデータの雰囲気を見る」段階についてです。

データフレームagというのがあるとします。

> head(ag)
  A B C D E F G
1 1 0 2 2 1 2 1
2 0 0 3 2 0 0 2
3 0 0 1 2 0 0 1
4 1 1 3 2 1 1 3
5 1 1 1 1 0 2 2
6 2 0 3 3 0 3 3
> nrow(ag)
[1] 97009

reshape2パッケージを使うとカテゴリの値ごとにクロス集計できます。例えば、カラムAとBのカテゴリ値のクロス表は

library(reshape2)
> dcast(ag,A~B,length,value.var=1)
  A     0     1
1 0 15021  6357
2 1 27410 32172
3 2  8393  7656

となります。このクロス表に対してクラメールの連関係数を求めます。ここにRのコードがあるのでコピペします。

cramer.coe <- function(dat){
  row.sum <- apply(dat, 1, sum)
  col.sum <- apply(dat, 2, sum)
  row.length <- length(dat[,1])
  col.length <- length(dat[1,])
  my.sum = 0
  for(i in 1:row.length){
    for(j in  1:col.length){
      num <- dat[i,j]^2 / (row.sum[i] * col.sum[j])
      my.sum <- my.sum + num
    }
  }
  coe <- sqrt((my.sum - 1) / (row.length - 1))
  coe
}

matrixで与える必要があるので加工します。

dcast.coe <- function(dat,form) {
  d <- dcast(dat,form,length,value.var=1)
  d.m <- matrix(as.double(as.matrix(d[,2:ncol(d)])),nrow(d),ncol(d)-1)
  cramer.coe(d.m)
}
> d <- dcast.coe(ag,A~B)
[1] 0.1383269

値が出ました。カテゴリ変数AとBの間には相関がそれほどなさそうです。

さて、これをAからGまで自動的にやりたいです。それにはdcastの第二引数のformulaをプログラム的に作ってやる必要がありますが、formulaというRの組み込み関数を使えば、文字列→formulaの変換ができますので、pasteで文字列を作って渡せばOK.

cols1 <- names(az)
cols2 <- names(az)
df <- data.frame()
for (c1 in cols1) for (c2 in cols2) {
  t <- paste(c1,"~",c2)
  coe <- if (c1==c2) NA else dcast.coe(ag,formula(t))
  #cat(paste(t,coe,"\n"))
  df <- rbind(df,data.frame(c1=c1,c2=c2,coe=coe))
}

(cols1とcols2は同じでなくても大丈夫なので、カラムを2グループに分けて、それぞれのグループから1個ずつとりだしてペアを作ったときの相関を見る事もできます。)

さて、カラムAからGまでの各ペアについてクラメールの連関係数が求まりました。ggplot2で可視化します。

library(ggplot2)
p <- ggplot(df,aes(c1,c2))+geom_tile(aes(fill=coe),color="white")+
  scale_fill_gradient(low="white",high="steelblue")
print(p)

実行すると以下のようになります。

色の濃いところ(グレー以外)が連関係数の大きいところです。(A,E),(A,F),(B,E),(C,D)あたりが濃いですね。このあたりはまとめてモデル化を考えた方がよさそうかな、とかが見えて良い感じです。

これをベースに因子分析したりクラスターにまとめたり、独立な要素ごとに分解してモデリングしたりといったことが出来ますね。

質的変数のみを扱うやり方があまりググっても出てこなかったので書いてみた次第でした。上の例と同様なものでkaggle用に作ったソースをgistにおいてあります。

VCAの出力はなぜ直感的に期待される多項式にならないのか

昨年NIPSベストペーパーで話題になったVCAの論文読みメモです。

デンソーアイティラボラトリの塚原氏が試していた件を初めとして、幾人か実装してブログを書かれているが、なぜ単純な円にガウスノイズを乗せた程度のグラフで円の方程式がパッと出てこないのか、その理由が知りたいです。

結論からいうと、論文読んでも良くわからなかったのですが、参考リンク

アブスト

R^N上の集合に対してVanishingイデアルが定義できて、それは有限のイデアル生成系でコンパクトに表現できる。それを効率良く構成する方法を示す。我々のアプローチは数値的に安定、つまり誤差を許容する。教師あり学習に適用でき、実験ではカーネル法と同等の精度を出す分類器を作れた。

1.イントロ

与えられたデータセットをゼロ点とする関数の集合は、機械学習の文脈ではコンパクトな特徴表現の可能性を意味する。ここではそういう関数を多項式に限定する。データをゼロ点とする多項式イデアルになり有限の要素から生成できるというヒルベルトの定理がある。今の機械学習はそういうことが出来ない。カーネルPCAではそれが出来ない事を論文中でしめしている。我々と最も近い手法は approximately vanishing ideal (AVI) algorithmという手法だがそれは元々の特徴量をどう並べ替えるかというインプットが必要な上に出力される多項式の項数も少ない。
われわれのVCAは与えられたデータと多項式の次数の上限を与えると、あとは特に追加情報を与えなくてもデータを零点とするイデアル自動的に出力する魅力的な手法だ。

2.定式化

多項式環の定義どおり。

3. 単純だが現実的でないアプローチ

指数オーダでよければ解ける。多項式カーネルを使って作ってゼロ空間を求めてやると、自明なイデアルしか残らないことが証明できる。なのでイデアルに相当するものをカーネルを通してブラックボックス的に使えないの?という素朴な疑問は否定的に結論づけられる。

4.VCAのアルゴリズム

生成系を構成する多項式がn個だとして、データ点をn個の多項式の線形結合(係数体はR)にバイアス項を加えたもの(*)を考え、これを1ステップずつ更新していくという方針。

そうすると、求めたい(*)の係数(R^(n+1)空間の部分空間)は、上で作った線形結合の式にデータ点を代入したm*(n+1)行列の零空間ということになる。

アルゴリズムの進行はF,Vという2つの多項式セットを更新していくことで行う。最初はFは1/sqrt(m)という1個だけ, Vは空集合

(なんとなく、大学受験のに例えると、Fが予備校で、Vが大学。毎年新たに誕生する高校3年生と浪人生であわせて受験生Cを構成する。浪人生は受験生と同じだけ勉強のバリエーションが広がっている。)

(そしてまず、予備校Fの空間に対して直交するように受験生Cを調整する。そうやって調整したCを、今度はC同士が直交するように正規直交基底を求める。もはや受験生というより受験生の正規直交基底を考えている。その基底ごとにデータへの成分を評価してvanishingすれば大学Vへ、しなければ予備校Fへ。っていうのを繰り返して予備校行きの学生がゼロになった時点で終了。)

5.分析

計算量

  • イテレーションはm+1回以下
  • 出力される多項式の次数はm以下
  • VとFの空間、時間計算量の上限についても技術あり

出力結果の品質保証

  • εがゼロならば、
  • Vはイデアルの生成系になっていて
  • かつ、任意の多項式がFとVで直和で表現可能

6.関連研究

イデアルの生成系の研究は歴史があり、グレブナー基底の計算アルゴリズムが一つのブレークスルーとなったという経緯をもつ。グレブナー基底をvanishingイデアルのために構成する方法が後に示され、本論文はそれを使っている。しかし誤差を許容しないので今まで殆ど応用されていない。
誤差を許容するvanishingイデアルの研究はあまりなされていない。最も近いのは上述したAVIだがグレブナー基底とは異なるタイプの近似的な生成系を出力する。AVIは特徴量の辞書付き順序を必要とする上に、単項式しか扱わないので殆ど項を含まない出力になる。さらに同じデータをvanishする次数の異なる単項式を複数含めてしまうという欠点もある。VCAはそのあたりの問題がない。

7.〜実験など

理論が知りたかったので以降は省略。

(ブログ主の)考察・疑問

Vの各要素は直交するのか?

  • 毎ステップでVに追加するメンバーが、その時点までに既にVにいるメンバーと直交するのだろうか?
  • 合格したCの基底をVにいれるときに、前回合格してVに入った基底と独立でないベクトルを構成してしまわないのか?

データから離れ度合いが気になる点

  • vanishingのエラー許容度εを計算するときに、多項式の次数の高低に関係なく同じεを使ってるけど
  • 次数nが高いとき、もとのデータ点でみるとεのn乗根のスケールに相当してしまわないのか?

多項式の関数空間の都合で決まった基底ごとに対応するデータへの評価(特異値の成分)で判断しているけど、それってどういう意味なのか?

まとめ

結局まだ良くわからず。グレブナー基底の計算アルゴリズム「H.Moller & B Buchberger, 1982」に基づいているそうなので、詳細はそれを確認すべきかもしれない。