0

我希望能够将新的“标签行”引入数据库中,这些“标签行”会“随机”显示给用户。(这些标语行显示为动画文本的介绍。)

根据这些标语产生的销售数量,我希望好的标语能够逐渐上升到顶部,但仍然不那么频繁地显示其他标语。

我可以很容易地想出一个基本算法,但我想要一些更“统计准确”的东西。

我真的不知道从哪里开始。自从我做了比基本统计更多的事情以来已经有一段时间了。我的模型需要对公差敏感,但显然它不需要值得 PHD。

编辑:我目前正在跟踪“转化率”——即每个订单的点击量。最好将此值计算为要输入算法的累积“所有时间”转换率。

4

4 回答 4

1

看看你的问题,我会稍微修改一下要求 -

1)最受欢迎的应该最常显示。2) 标语应该“过时”,因此过去获得了很多选票(购买),但最近没有出现的应该不那么频繁地显示 3) 全新的标语应该在第一天更频繁地显示。

如果您同意这些,那么算法可能类似于:

START:
x = random(1, 3); 
if x = 3 goto NEW else goto NORMAL

NEW:
TagVec = Taglines.filterYounger(5 days); // I'm taking a LOT of liberties with the pseudo code,,,
x = random(1, TagVec.Length);
return tagVec[x-1]; // 0 indexed vectors even in made up language,


NORMAL:
// Similar to EBGREEN above
sum = 0;
ForEach(TagLine in TagLines) {
   sum += TagLine.noOfPurhcases;
}
x = random(1, sum);
ForEach(TagLine in TagLines) {
   x -= TagLine.noOfPurchase;
   if ( x > 0) return TagLine; // Find the TagLine that represent our random number
}

现在,作为一种设置,我会给每条新的标语购买 10 次,以避免一次购买变得非常倾斜。

老化过程我会将一周以上的购买视为每周购买 0.8 件。所以 1 周大给 0.8 分,2 周给 0.8*0.8 = 0,64 等等......

您必须使用 Initial purhcases 参数(在我的示例中为 10)和老化速度(此处为 1 周)和老化因子(此处为 0.8)来找到适合您的东西。

于 2008-10-17T15:08:23.340 回答
0

这是javascript中的一个示例。并不是说我不建议运行这个客户端......还有很多可以做的优化。

注意:此处实现 createMemberInNormalDistribution()将均匀分布转换为正态分布

/*
 * an example set of taglines
 * hits are sales
 * views are times its been shown
 */
var taglines = [
    {"tag":"tagline 1","hits":1,"views":234},
    {"tag":"tagline 2","hits":5,"views":566},
    {"tag":"tagline 3","hits":3,"views":421},
    {"tag":"tagline 4","hits":1,"views":120},   
    {"tag":"tagline 5","hits":7,"views":200}
];

/*set up our stat model for the tags*/
var TagModel = function(set){ 
    var  hits, views, sumOfDiff, sumOfSqDiff; 
    hits = views = sumOfDiff = sumOfSqDiff = 0;
    /*find average*/
    for (n in set){
        hits += set[n].hits;
        views += set[n].views;  
    }
    this.avg = hits/views;
    /*find standard deviation and variance*/
    for (n in set){
        var diff =((set[n].hits/set[n].views)-this.avg);
        sumOfDiff += diff;
        sumOfSqDiff += diff*diff;   
    }
    this.variance = sumOfDiff;
    this.std_dev = Math.sqrt(sumOfSqDiff/set.length);
    /*return tag to use fChooser determines likelyhood of tag*/
    this.getTag = function(fChooser){
        var m = this;
        set.sort(function(a,b){
                return fChooser((a.hits/a.views),(b.hits/b.views), m);
            });
        return set[0];
    };
};

var config = {

    "uniformDistribution":function(a,b,model){
        return Math.random()*b-Math.random()*a;
    },
    "normalDistribution":function(a,b,model){
        var a1 = createMemberInNormalDistribution(model.avg,model.std_dev)* a;
        var b1 = createMemberInNormalDistribution(model.avg,model.std_dev)* b;
        return b1-a1;
    },
    //say weight = 10^n... higher n is the more even the distribution will be.
    "weight": .5,
    "weightedDistribution":function(a,b,model){
        var a1 = createMemberInNormalDistribution(model.avg,model.std_dev*config.weight)* a;
        var b1 = createMemberInNormalDistribution(model.avg,model.std_dev*config.weight)* b;
        return b1-a1;
    }
}

var model = new TagModel(taglines);

//to use
model.getTag(config.uniformDistribution).tag;
//running 10000 times: ({'tagline 4':836, 'tagline 5':7608, 'tagline 1':100, 'tagline 2':924, 'tagline 3':532})

model.getTag(config.normalDistribution).tag;
//running 10000 times: ({'tagline 4':1775, 'tagline 5':3471, 'tagline 1':1273, 'tagline 2':1857, 'tagline 3':1624})

model.getTag(config.weightedDistribution).tag;
//running 10000 times: ({'tagline 4':1514, 'tagline 5':5045, 'tagline 1':577, 'tagline 2':1627, 'tagline 3':1237})

config.weight = 2;
model.getTag(config.weightedDistribution).tag;
//running 10000 times: {'tagline 4':1941, 'tagline 5':2715, 'tagline 1':1559, 'tagline 2':1957, 'tagline 3':1828})
于 2008-10-20T03:59:53.313 回答
0

你必须想出一个基于销售额的加权公式。

我不认为这里有任何“统计上准确”的公式——这完全取决于你的偏好。

没有人可以说“这是正确的权重,而另一个权重是错误的”,因为没有你试图模拟的最终结果——这不像试图权衡对即将举行的选举的民意调查的反应(你正在尝试对结果进行建模以表示将来会发生的事情)。

于 2008-10-16T20:09:56.353 回答
0

我建议根据以前的销售情况随机选择一个加权因子。所以假设你有这个:

  • tag1 = 1 次销售
  • tag2 = 0 销售额
  • tag3 = 1 次销售
  • tag4 = 2 个销售额
  • tag5 = 3 次销售

一个简单的加权公式是 1 + 销售额,所以这就是选择每个标签的概率:

  • 标签1 = 2/12 = 16.7%
  • 标记2 = 1/12 = 8.3%
  • 标签3 = 2/12 = 16.6%
  • 标签4 = 3/12 = 25%
  • 标签5 = 4/12 = 33.3%

您可以轻松更改加权公式以获得您想要的分布。

于 2008-10-16T19:09:27.927 回答