我真的很喜欢统计学,但已经有 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 天内的(命中、值、天数)的数组。例如,如果周一 Mozilla 的 Value-Of-Mozilla 有一个大峰值(相对于基线),而周二 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)
提前致谢!