• 统计学
  • 如何计算网站栏目的可读性?

早就注册了会员,只是不经常来。

今天来了,是想向各位请假一个问题。

也不知道发在哪个版块比较合适,感觉发在哪个版块都不合适,最后还是发在这里了。





一个网站,知道每篇文章的点击量,如何计算栏目的可读性?



每个栏目都包含一定数量的文章。



1.如何定义栏目的可读性?

通俗的说:

两个栏目分别是A栏目、B栏目,假设都包含100篇文章。

某个月,A栏目中的一篇文章的点击量是100次,其他99篇文章的点击量都是0次。B栏目的每一篇文章的点击量都是1次。

那么就粗略地认为B栏目的可读性要高一些。



2.如何计算栏目的可读性?

需要给出理论上可行、实践上也可行的算法或公式。



谁能帮帮我呢??先谢谢啦。
可读性这种标准好像有点不好定义吧。



就所举的例子看,可以实践的方法应该有很多。比如可以用中位数、方差等统计量,也可以用打分的方式,针对点击量为0的进行扣分。所以,关键还是得结合研究目的和关注点来确定用什么模型。
[quote]引用第1楼yanlinlin82于2009-06-16 23:00发表的  :

可读性这种标准好像有点不好定义吧。



就所举的例子看,可以实践的方法应该有很多。比如可以用中位数、方差等统计量,也可以用打分的方式,针对点击量为0的进行扣分。所以,关键还是得结合研究目的和关注点来确定用什么模型。

[/quote]





感谢您!



但是还是不是很清晰。
我是说不清楚你所谓的“可读性”要解决的问题和所关注的数据特征。你能否描述更明确些。
[quote]引用第3楼yanlinlin82于2009-06-17 09:07发表的 回 2楼(ananstarlit) 的帖子 :

我是说不清楚你所谓的“可读性”要解决的问题和所关注的数据特征。你能否描述更明确些。

[/quote]



我们目前也没有为这个“可读性”做出一个定义,这个名词是领导提出来的。

不过提出可读性这个东西,主要目的就是想通过一些科学的算法,把栏目下的文章的访问情况、受欢迎情况等体现出来。
点击量是由标题中的关键字吸引读者过去的,只能是标题list的注意力集中度

至于可读性,应该是被引用和反馈的部分所占比例
1 个月 后
假设A、B两个栏目分别有有N、M篇文章,每篇文章的点击次数Ai,Bj。简单的可读性可以入下测量。

求出A、B栏目中每篇文章的平均阅读量:记为mean(Ai),mean(Bi)。

求出A、B栏目中每篇文章阅读量的标准差:记为sd(Ai),sd(Bi)。

那么可读性为KA=u*mean(Ai)+v*sd(Ai);

KB=u*mean(Bj)+v*sd(Bj);

比较KA和KB即可。

其中u和v分别是权数,和为1,u/v表示相对重要程度。
这种算法好像有问题吧?



mean 越大体现点击量越大,这个可以理解;但 sd 越大,可读性也越大,这个该怎么理解呢?



还拿楼主开始举的例子来看:

> a <- c(100, rep(0, 99)) # 1篇点击100次,99篇点击0次

> b <- rep(1, 100)            # 100篇每篇点击1次

> c(mean_a = mean(a), mean_b = mean(b), sd_a = sd(a), sd_b = sd(b))

mean_a mean_b   sd_a   sd_b

     1         1                10         0

这时不管u和v怎么选择(0~1之间),KA 都比 KB 要大,也就是得出 A 比 B 可读性更高。
先谢过阁下,还是阁下细心。发现了粗心的地方,其实我也是心中犹豫再三呢。本来想的是sd取倒数再加权数。

可是有一个两难境地:

不取倒数时,得出结果KA比KB大。

如果取倒数,KB又定比KA大。

这可能不是统计能解决得了。

它牵涉到对可读性的定义。

在平均阅读量相同的时候,我觉得方差大的栏目,可读性更好。

这里方差大,表示文章稂莠不齐的情况严重。也就是说较差的文章拖了较好文章的后腿。

因此,删去较差文章。则其平均阅读量变大,方差变小。



拿举得例子而言,把A中的99篇去掉。只保留一篇。

如此反复剔除差的文章,就能保证A栏目可读性一直较好。

而B中,由于各个文章相差无几,不易进行剔除。就是说可读性不易改善。



不知是否解释的通?
方差只是反映文章的点击量差异,跟整个栏目的可读性之间的关系似乎不容易确定呢。



既然楼主本人也没有一个确定的可读性定义,那么或者可以简单起见,使用点击量的几何平均数来粗略描述。除了上面的A、B个例子,我另外增加了几个数据,程序如下:
<br />
data <- list(<br />
    a = c(100, rep(0, 99)),<br />
    b = rep(1, 100),<br />
    c = c(100, rep(1, 99)),<br />
    d = rep(2, 100),<br />
    e = c(rep(30, 50), rep(50, 50))<br />
)<br />
<br />
f <- function(x) prod(x) ^ (1 / length(x))<br />
lapply(data, f)<br />




结果如下:
<br />
$a<br />
[1] 0<br />
<br />
$b<br />
[1] 1<br />
<br />
$c<br />
[1] 1.047129<br />
<br />
$d<br />
[1] 2<br />
<br />
$e<br />
[1] 38.72983<br />




的确存在“较差的文章拖了较好文章的后腿”的情况,而且是用几何平均数,结果也会更加接近较小的值。不过,既然是评判整个栏目,那么较差的文章多,较好的文章少,自然也不应该算作好栏目吧?
1.你用的方法确实争议较少。因为你追求的是稳妥。然而,过于静态了吧。

而且算术平均数和几何平均数同属平均值范畴。它并没有本质上克服算术平均数的劣势。

平均点击量一样(或者算出的几何平均数一样)如何判定呢。

所以至少要有两个指标才能区分可读性,一个指标恐怕达不到要求。 



2.如果栏目点击量一样,我们为什么其中一个方差大,就说他是不好的栏目呢。 



3.如果动态的看,对于平均点击量一样的栏目,方差大的进行剔除。

之后平均点击量变大,且方差变小。

也就说在稳态之后,其可读性较好。



话说过来,本身这就是一个没有定论的东西。

是不是可以参见调和级数呢?

首先对每个栏目所有文章的点击量进行排序。

然后将各自点击量与序数的倒数相乘,再求和。

以其作为指标。
虽然几种平均数都属于平均值的范畴,但它们的关注点是不一样的。这种关注点的差异,其实在一定程度上也反映了原始数据的某些分布(比如几何平均数就比较接近于较小的值)。如果所要了解的“可读性”正好关注的是这类分布的数据,那我想这个平均值本身就能反映该“可读性”了。而你所说的“调和级数”,其实也只不过是一种根据数值大小,给予不同权重而求得的平均值,它跟方差似乎也没有什么关系呢。



而所谓的“动态剔除方差较大的数值”,是好的(点击量很大的)与差的(点击量很小的)离群值都去掉呢,还是只去掉其中差的?若只去掉差的,是否会有些主观?若同时去掉好的与差的,是否又回到了求平均值的效果?



比如:100篇文章,一种情况是每一篇都点击100次;一种情况是98篇每篇都点击100次,剩余两篇分别点击101次与99次;还有一种是98篇每篇都点击100次,剩余两篇分别点击150次与50次。这三种情况到底哪一个的可读性更好呢?这其实还是回到最初的定义问题上来了。



下面是我把数据和不同方法都用R代码表示出来(如果还有什么其他数据,可以往其中增加,以测试和比较不同函数对可读性的计算结果):
<br />
Sys.setlocale(locale = "Chinese_China.936") # 设置字符集,以便使用汉字作为列名(若R语言环境本身为中文,则可不用此句)<br />
<br />
# 设置数据<br />
data <- list(<br />
    a = c(100, rep(0, 99)),<br />
    b = rep(1, 100),<br />
    c = c(100, rep(1, 99)),<br />
    d = rep(2, 100),<br />
    e = c(rep(30, 50), rep(50, 50)),<br />
    f = rep(100, 100),<br />
    g = c(rep(100, 98), 101, 99),<br />
    h = c(rep(100, 98), 150, 50)<br />
)<br />
<br />
# 不同的函数<br />
funs <- c(<br />
    "算术平均数" = mean,<br />
    "中位数"     = median,<br />
    "几何平均数" = function(x) prod(x) ^ (1 / length(x)),<br />
    "调和平均数" = function(x) 1 / sum(1 / x),<br />
    "调和级数"   = function(x) sum(sort(x) / seq_along(x))<br />
)<br />
<br />
# 计算结果<br />
sapply(funs, function(FUN) lapply(data, FUN))<br />




计算结果如下:
<br />
  算术平均数 中位数 几何平均数 调和平均数 调和级数<br />
a 1          0      0          0          1       <br />
b 1          1      1          0.01       5.187378<br />
c 1.99       1      1.047129   0.01009999 6.177378<br />
d 2          2      2          0.02       10.37476<br />
e 40         40     38.72983   0.375      169.3848<br />
f 100        100    100        1          518.7378<br />
g 100        100    99.9999    0.999998   517.7478<br />
h 100        100    99.71273   0.9933775  469.2378<br />




供参考,欢迎大家踊跃发言,集思广益。
去掉差的,这样才能达到时均值变大且方差变小的的效果。

[s:13]

我觉得,本身构建指标就避免不了主观的成分啊。

呵呵,昨天吃饭的时候,我突然想起来的调和级数,觉得那个还不错。

有时间聊一下吧。
去掉差的数据也不难,可关键是怎么确定这个去除的标准。



在前面的程序的基础上,我选取大于或等于 mean(x) - sd(x) 的值来尝试了一下:
<br />
sapply(funs, function(FUN) lapply(data, function(x) FUN(x[x >= mean(x) - sd(x)])))<br />




得到结果:
<br />
  算术平均数 中位数 几何平均数 调和平均数 调和级数<br />
a 1          0      0          0          1       <br />
b 1          1      1          0.01       5.187378<br />
c 1.99       1      1.047129   0.01009999 6.177378<br />
d 2          2      2          0.02       10.37476<br />
e 40         40     38.72983   0.375      169.3848<br />
f 100        100    100        1          518.7378<br />
g 100.0101   100    100.0101   1.010202   517.7479<br />
h 100.5051   100    100.4104   1.013514   518.2428<br />




看起来,像 f、g、h三个数据,虽然去除差的数值前,其算术平均值都一样,但在去除后,g 和 h 相比 f,由于比平均值更高的部分数值(如g中的101,f中的150),让各个平均数都增大了。也就是看起来 h 的可读性比 f 和 g 都好,这合理么?