2008年11月6日木曜日

プログラマに統計学が必要な理由

最近統計学を押さえる必要性を感じて、完全独習 統計学入門(小島 寛之)を読んだ。

どこに統計学を学ぶ必要性を感じたのかと、その必要性に対してこの本はどうだったかというレビューをまとめたいと思う。


"完全独習 統計学入門" (小島 寛之)

統計学を必要と感じた理由

これは2つある。

ひとつの理由は、Webサービスのためのマーケティングをしたいなら、統計学は必要だよなと、Yahoo!リサーチの価格を調べながら思った。自分の質問に対して、何個の回答があれば十分だと言えるのかわからなかったからだ。で、その場でググっても、表面的なものしかわからず、しかもそれが正しいのか、どういう風に使えばいいのががわからなかった。

後日談で言うなら、"完全独習 統計学入門"を読んでも、この回答数をどうすればいいかはわからなかったので、他の本を読む必要がある。(調査は"完全独習 統計学入門"が対象とする話ではないんだと思う。なにか良さそうな本を知ってる人が居たら教えてください)

もうひとつの理由は、レコメンドシステム(推薦システム)を構築するときや、経営判断を行うときに統計学の知識を使いそうだ、ということがわかったから。

と言っても、「基礎理論からしっかり積み上げてきて、その応用として意志決定のために統計学を使う」って話なら遠回りすぎるので、もっと実践的に「このコードで結果を出すことが出来るんだけど、そのままじゃ式の意味がわからなくて応用できないから、考え方を知る上で基礎理論を勉強しよう」って流れなんだけど。

で、一時期ブログで話題になってたし、Amazonでも高評価だったので、"完全独習 統計学入門"を読んでみたという流れ。

完全独習統計学入門ってどうよ?

この本に書いてあることをまとめてみる。

  • 正規分布なデータであれば、平均と標準偏差が重要。
  • なぜなら、正規分布は計算によって標準正規分布と見なすことができ、標準正規分布の特徴については研究が進んでいるので、少量のデータから色々なことが分かる
  • ある条件下で検定(特定の値はあり得るか)や、それを応用した区間推定(x1~x2に値が収まる確率は何%)を使うと、高確率で未来を予測できる
  • 平均については理解が簡単だとして、あまりなじみのない標準偏差についても、深く知れば生活の上での考え方に幅が出てくる
  • 標準正規分布に対する研究が進んだことによって、現在では数個のサンプルを得るだけで、母体を高確率で推定することが可能

で、どう思ったか?

たしかに、確率や微分積分などの数学の知識は必要なく、読みやすい文章(読むのが早い人なら半日ぐらいか)を読むだけで統計とはなんぞやの考え方部分を理解することが出来たし、正規分布だとわかっているだけの状態から数個のサンプルを得るだけで母体を区間推定する方法など、かなり実践的な知識を得ることが出来た。

まぁ、数学部分をはしょってるので、応用は利かないと思っているけど、何かをするとき統計学のエッセンスを使うことはできると思う。

オススメできるか?

本当に区間推定をするまでの最短経路しか触れていないので、短時間で凄い知識量を得た気になる。そういう意味でオススメ。

でも、実際には骨だけで肉が無いわけで、この本だけで統計を使いこなすのはムリだとも思う。

まぁ、統計学の一番の基礎理論は理解できたので、必要なら実践的な知識を付加することもできるだろうし、レコメンドシステムなどの基礎知識としても使えると思う。

2008年11月2日日曜日

第1回北海道情報セキュリティ勉強会に参加しました

第1回北海道情報セキュリティ勉強会(通称せきゅぽろ)へ参加してきました。

今回は第一回ということもあって、がっちりセキュリティというよりは、セキュリティ周辺事情といったノリでしたが、参加費1000円にもかかわらず、50人弱の参加者が集まり、期待の高さを伺わせました。

サイボウズの竹迫さんや、まっちゃだいふくさんのトークは会場を沸かせましたが、もっと突っ込んだ話を聞きたかった人も多かったはず。

東京と比べて札幌は保守要員より開発者が多いらしいので、(勝手に)開発者を代表して、次回聞きたいことをまとめます。

ちなみにおいらサーバも立てれるプログラマ、という立ち位置なので、ちゃんとしたセキュリティの知識があるわけではありません。的外れだったら突っ込みよろしくお願いします。

実践的なセキュリティ対策の要点

まず、実践的なセキュリティ対策の要点って大きく分けると以下の5つなのかなぁって(勝手に)思った。

  1. 不要なサービスやデーモンを停止する
  2. 色々なログを取り警報を出す
  3. セキュリティスキャナで既存のシステムをチェックする
  4. (ログやスキャナやニュースなどで)見つかった穴を埋める
  5. 定期的にバックアップ

で、この5つが正しいと仮定すると、ある程度の所までは定型パターンに落とし込める気がした。

たとえば、RedHatをPHPとMySQLを動かすWebサーバにするならば、デフォルトで起動している○○と××デーモンは不要(1)で、my.confで△△の設定はOnにしてバイナリログやスロークエリーログなどを有効(2)にし、snortやswatchなどの網を張る(2)。その上で完成したシステムに○○スキャナや××攻撃を仕掛けることよってセキュリティをチェック(3)し、見つかったセキュリティホールの原因がデーモンならばパッケージシステムのアップデートやパッチを(4)、構築したアプリケーションが原因ならばその是正措置をとり(4)、ありかじめ打ち合わせ済みのリスクを担保できるよう、LVMでスナップショットを取って丸ごとバックアップするシステムを構築の後テストする(5)。みたいな。

実際はもっともっと細かいんだろうけど、それでもチュートリアル風に落とし込むことは可能で、それだけでそこそこセキュリティは保たれる気がする。しかもここまでの流れって、費用対効果的には抜群なんじゃないかな。ちゃんと出来てない人いると思うし。

もしこれが可能ならば、ぜひ勉強会で共有したいなぁ。

無料でどこまで現実的な対策が出来るか? その閾値は?

おいらのように、1件数百万の仕事をしている人だと、セキュリティ専用のプロプライエタリ製品まで予算が回らない。

じゃあ何もしないとかというと、オープンソースモノである程度まではいけるんじゃないかと。

上の例が既にそうなんだけど、(あまりガチガチにして運用が大変になるようなものは除外して)オープンソース同士の組み合わせでどこまでの事が出来て、「どういうケースだと、プロプライエタリ製品を使うことで、どこまでの問題がクリアされるか」っていうあたりがノウハウになる気がするので、こういった事例を共有できればいいなぁ。

プロプライエタリ製品が嫌いって事じゃあないんだけど、それがなきゃ何も出来ない訳じゃあないだろうし、費用対効果的に、プロプライエタリ製品を使うべき閾値を共有したいだけなんだけど。

システムの性格による使い分け

お金を扱うシステムなのかとか、保守要員は居るかとか、そもそも保守に当てる金はもらってるのか、などなど扱うシステムによってどこまでセキュリティを確保するか異なってくる気がする。

先のチュートリアルにしても、

  • やっべぇので手間を惜しまずガチガチセキュリティ重視
  • 完全自立でヤバイときだけ教えてくださいな運用手間重視
  • 結局は壊れたときに直せれば良いんでしょなバックアップ重視
  • 自社システムなのでリスクは許容するけれどな予算重視

とか、現実的に採用可能な方針ってのは複数ある気がする。

新しい製品やサービスによって今までの世界観が覆るようなもの

たとえば、バックアップシステムなら、深夜にシステムを止めてサーバ毎に接続してあるオートローダのテープにバックアップするんじゃなくて、LVMでスナップショット取ってAmazonS3に転送しちゃうとかね。

保管場所や帯域が許せるなら、AmazonS3は安価なシステムのバックアップ先としてかなり有望だと思うんだ。

で、こういった選択肢に含まれるような製品やサービスの情報を共有できればいいなぁとか。

対象システムによって開催日を分けるとか

そもそも、WindowsなのかLinuxなのかで実際の対策は大きく違ってくる気がするので、概念的な話だけする日、主にLinux関係の話をする日、主にWindows関係の話をする日に分けてもらった方が良い気がする。

個人的には、Windowsを使ったシステムを構築するつもりはないので、Windowsの話ならば参加しないと思う。


そんなこんなで、今後のせきゅぽろに期待!!