c***z 发帖数: 6348 | 1 我最近做life time value,用的BTYD包
http://cran.r-project.org/web/packages/BTYD/vignettes/BTYD-walk
里面主要的方程是
pnbd.EstimateParameters 它会call optim,使用L-BFGS-B method
pnbd.LL 这是Pareto/NBD的likelihood function
我能够replicate原文章的结果,但是公司自己的数据有这么三个issue
1. L-BFGS-B method requires a finite value for fn 应该是likelihood function
overflow了,我对所有数据先取一次log,基本上解决了这个问题
2. 非常非常的慢,即使我使用十分之一的数据,把data frame变成matrix也没有帮助
3. 结果不stable,几乎总是取得local optimal,我试着用了 mothod = SANN (
simulated annealing) 也没有帮助
有点stuck了,所以想问问大家
多谢多谢!
chao |
c***z 发帖数: 6348 | 2 没有数据确实很难诊断问题,如果能给些方向性的指点就不胜感激了 |
l******n 发帖数: 9344 | 3 2的可能性之一是收敛条件和迭代数量,改一下应该可以快些
3的话主要是初值的问题
function
【在 c***z 的大作中提到】 : 我最近做life time value,用的BTYD包 : http://cran.r-project.org/web/packages/BTYD/vignettes/BTYD-walk : 里面主要的方程是 : pnbd.EstimateParameters 它会call optim,使用L-BFGS-B method : pnbd.LL 这是Pareto/NBD的likelihood function : 我能够replicate原文章的结果,但是公司自己的数据有这么三个issue : 1. L-BFGS-B method requires a finite value for fn 应该是likelihood function : overflow了,我对所有数据先取一次log,基本上解决了这个问题 : 2. 非常非常的慢,即使我使用十分之一的数据,把data frame变成matrix也没有帮助 : 3. 结果不stable,几乎总是取得local optimal,我试着用了 mothod = SANN (
|
w**c 发帖数: 160 | |
z******n 发帖数: 397 | 5 in the manual:
This function may take some time to run.
try to read the code to see if the authors pass gr to optim or not.
function
【在 c***z 的大作中提到】 : 我最近做life time value,用的BTYD包 : http://cran.r-project.org/web/packages/BTYD/vignettes/BTYD-walk : 里面主要的方程是 : pnbd.EstimateParameters 它会call optim,使用L-BFGS-B method : pnbd.LL 这是Pareto/NBD的likelihood function : 我能够replicate原文章的结果,但是公司自己的数据有这么三个issue : 1. L-BFGS-B method requires a finite value for fn 应该是likelihood function : overflow了,我对所有数据先取一次log,基本上解决了这个问题 : 2. 非常非常的慢,即使我使用十分之一的数据,把data frame变成matrix也没有帮助 : 3. 结果不stable,几乎总是取得local optimal,我试着用了 mothod = SANN (
|
c***z 发帖数: 6348 | 6 @longtian大牛:
Issue 2 能展开说说吗?我看了一下optim的代码,它会call一个C程序叫做C_optim,
好像收敛条件和迭代数量得在那里改?有点头大,很久没有弄C了。
@zhanghan大牛:
原作者没有pass gr,不知道从那个超复杂的likelyhood弄个gr会有多麻烦?
多谢各位大牛! |
c***z 发帖数: 6348 | 7 I found the controls for the convergence tolerance and max number of
iterations in the optim() function.
Am playing with the different methods and combination of controls.
Thanks a lot! |
c***z 发帖数: 6348 | 8 OK, got some running code and stable results. However one parameter is too
big and p_alive is always 1.
Any clue to fix this? Thanks a lot! |