Amazon EMRでHive/Impala「思考のスピード」とSQL

Amazon AWSのEMRでHiveとImpalaに触ってみた。

通常なら自分でHadoopクラスタを組んでからHiveやImpalaをインストールして…とやる必要があるのに、EMRだとコンソールからポチポチするだけで、しかもSpot Instanceで超安価にクラスタができあがる。

SSHでログインしてhiveやimpala-shellとコマンドを叩くだけ。AWSのサービスはいくつかあるけど、個人的にEMRは一番凄いと思う。

テスト的に某SaaS型WAFサービスのアクセスログを22億行ほどロードして、impalaでいくつかSQLでクエリを投げてみた。m1.mediumという遅いインスタンス20台のクラスタで、単純な問い合わせが4分くらい。

Hiveに比べれば圧倒的に高速なんだけど、俗に最近のSQL on Hadoopで言われる「思考のスピードで解析する」という感じはしない。4分も経ったら脳みその一時記憶領域は完全にクリアされてしまう。

で、ぶっちゃけ思ったんだけど、数億件以上のアクセスログ的なデータに対して解析目的でSQLを投げる場合って、実際にはサンプリングして1/100~1/1000くらいにサイズダウンさせたデータに対して同じクエリ投げれば、十分に目的を達成できる場合が殆どなんじゃないだろうか。

本当にそのまま数億件以上のデータを扱う必要があるケースというのは、異常検知や、あるいは非常にロングテール的にデータの特徴が多岐に渡るケースになるんだと思う。多くの場合はそうでない気がする。

Advertisements

データサイエンスの本を買ったが一部アツすぎる内容で萎えた話

ビジネス活用事例で学ぶ データサイエンス入門
酒巻 隆治 里 洋平
SBクリエイティブ
売り上げランキング: 7,559

↑この本を買ったのだが、95ページ周辺にむちゃくちゃな事が書いてあって萎えた。

統計学では「仮説検定」という手法があります。

しかし、仮説検定は(中略)、人数が(サンプルサイズ)が多い場合には、ほとんどの結果が「統計的に有意な差がある」という結果になります。

差がわずかしかない二つの集団を比べる場合は、そんなことはない。

そもそも「サンプルサイズが多い場合」の定義が書かれていない。「多い」ってどのくらい?

「ほとんど」ってどのくらい?

結局、著者の個人的な経験にのみ基づく内容であって、データ「サイエンス」とタイトルに付く本に書くような話じゃない。

このページの暴走はすごくて、続いて次のような記述もある。

ビッグデータと騒がれているような現在においては(中略)、「仮説検定をしないと統計的に差があるかわからない」くらいの差は意味があるとは言いがたいのです。

お前は何を言(ry

続いて、次も95ページから。

この本の著者に限らず、仮説検定の使い方を理解していない人が仮説検定について誤解しやすいポイントが次の部分。

「統計的に有意な差」があっても、ビジネスとして意味のある差とは限りません。

この事自体は正しいのだが、そもそも考える順番が違うのである。仮説検定とは「もし統計的に有意な差があったら、ビジネス的に意味がある」ことに対して使うための道具なのだ。

この「アツい」95ページはA/Bテストの章の一部である。このA/Bテストの章で取り上げている例が不適切である点もかなり気になった。この部分については本書内の前提の説明が(このブログでやるには)結構大変になるので、興味のある人は実際にこの本を当たってほしい。

AとB、2つのバナーを設置したところ、AとBのクリック率(それぞれ0.080%、0.115%)に統計的に有意な差があって…というのはお約束の流れでよいのだが、結局のところ、この差はどうでもよくて、「目標はクリック率12%です。Bは約12%だからOKです!」と締めくくられる。

約12%? 

しかしデータによると、このBのクリック数は43790回のうち5056回である。

> binom.test(5056,43790)

Exact binomial test

data: 5056 and 43790

number of successes = 5056, number of trials = 43790, p-value < 2.2e-16

alternative hypothesis: true probability of success is not equal to 0.5

95 percent confidence interval:

0.1124811 0.1184903

sample estimates:

probability of success

0.1154602

このように、「12%」のラインは95%信頼区間に含まれない。

> binom.test(5056,43790,conf.level=0.9965)

Exact binomial test

data: 5056 and 43790

number of successes = 5056, number of trials = 43790, p-value < 2.2e-16

alternative hypothesis: true probability of success is not equal to 0.5

99.65 percent confidence interval:

0.1110425 0.1199839

sample estimates:

probability of success

0.1154602

数値をさらに厳しくしてみて99.65%の信頼区間まで広げても、12%のラインは入らないのだ。

つまり、「約12%」とは言っているが、実際にクリック率が12%を達成する可能性は非常に低いのである。

まさか0.1154は四捨五入すると0.12だから約12%でOK…ということなのだろうか…それってデータサイエンスなのか…

さてずいぶん文句ばかり書いてしまったが、この本のスタイルは文句なしに素晴らしい。Rのコードとデータがあり、解析に入る前の実際のビジネスの状況や悩み、思考の過程などが各章において同じ形式で用意されていて、追試しやすい。皆様ぜひご一読を。

2014/08/17追記

「サンプル数が大きくなると統計的に有意であると判断する確率が高まる傾向がありそうだ」といっていいように思えるんだが。

というツッコミをいただきました。この点については異論はないです。その通りの傾向があると思います。しかし、それと

ほとんどの結果が「統計的に有意な差がある」という結果になります。

という書き方だと、だいぶニュアンスが違うように感じますね。上記繰り返しになっちゃいますが「ほとんど」ってどのくらい?ということになります。まぁ「ほとんど」ってサイエンスじゃないですよね。