私は統計学がとても好きですが、6 年以上コースを受講していません。ここで必要なテストの種類と、これらの種類の問題に使用するのに最適な numpy/scipy/R 関数を理解するのに苦労しています。
訪問者とそれに対応するプロパティ (例: "Browser = Mozilla, Referrer = Google") のテーブルと、時間の経過に伴うデータ ポイントにグループ化された、訪問者ごとの変数値 (例: $5) があります。
私の目標は次のとおりです。
A) 最も重要なプロパティ ファミリを見つけ、そのファミリが「どれほど重要か」のスコアを付けます
導きたい結論の例*:
Referrer has 10x larger effect size upon value-per-visitor than Browser
=> PropertyFamily('browser').significance = 1
=> PropertyFamily('referrer').significance = 10
と
B) 有意性スコアを使用して、ファミリー内で最も重要なプロパティを見つけます。
私が描きたい結論の例:
GIVEN THAT Value:Baseline => $5/hit
5 hits from IE @ $5/hit (equal to baseline) => no significance
1 hit from Netscape @ $0 => little significance (not enough data)
10 hits from FF @ $10/hit => HIGH significance (hits and delta_value both high)
私の質問は次のとおりです。
1) ここで私の生活を楽にする numpy/scipy/R 関数はありますか?
2)ANOVA(分散分析)とANOVA-over-timeについてもう少し知っている人は、フィードバックを提供してもらえますか? 私はこれを正しくやっているとは確信が持てず、単純なものが欠けている可能性があります。確認または修正はどちらも大歓迎です。
これらは、過去 30 日間の (ヒット数、値、日数) の配列であることに注意してください。たとえば、月曜日に Value-Of-Mozilla に大きなピーク (ベースラインと比較して) があり、火曜日に Value-Of-Mozilla に (ベースラインを下回る) 低下がある場合、Mozilla を「重要な」プロパティとして表示したいと考えています。 (ピーク/ドロップが互いに相殺するのではなく)
マップ/縮小する前の入力データの例:
data = {
'baseline': [(hits, value, day) for hits, value, day in last_thirty_days('baseline')],
'browser': {
'mozilla': [(hits, value, day) for hits, value, day in last_thirty_days('browser', 'mozilla')],
... etc ...
}
}
... etc ...
これが私の現在のコードです。これは Dumbo/Hadoop で実行され、基本的に私が考案した数式の「重要度」の数値を提供します。私の式は機能し、意味のあるデータが得られますが、「重要性」の値は明確に定義されていません (「重要な」プロパティのスコアは通常 100 以上ですが、これはデータセットのサイズによって異なります)。これにはおそらく「本当の公式」があります。
# Runs after each (hits, value, date) tuple has been grouped
# into corresponding "plot points", as they would appear on a graph
pp = PlotPoint(property, date, hits, value)
pp.epc = float(pp.value/pp.hits) if pp.hits else 0
# Finds PlotPoint('baseline', date)
# if pp = PlotPoint('firefox', '1-1-10')
# then pp.baseline == PlotPoint('baseline', '1-1-10')
baseline = pp.baseline()
if baseline.hits == 0:
volume_ratio = 0
else:
volume_ratio = round(100*pp.hits/baseline.hits)
value_ratio = baseline.epc - pp.epc
# Make up a significance value --
# e.g. (10% of visitors * ($1 delta from baseline))^2
pp.significance = math.sqrt(volume_ratio * value_ratio **2)
# OK, we have values for each plotpoint, now sum them up
# to get values for the whole property (over a 30day period)
pps = property.plotpoint_set.all()
property.hits = sum([p.hits for p in pps])
property.value = sum([p.value for p in pps])
property.epc = property.value/property.hits
value_delta = baseline.epc - property.epc
# Make up a significance for the Property, based on each point's significance
property.significance = math.log(sum(
[sss.significance**2 for sss in pps]
)*abs(value_delta)+1)
前もって感謝します!