顧客が一定期間後に生きている確率を推定しようとしています。ある会社の 500 人の顧客のデータがあります。顧客ごとに、x (特定の顧客によるすべての期間にわたるトランザクションの数)、tx (最後のトランザクションの時間)、および T (最初の購入から観察ウィンドウの終了までの合計時間) を知っています。
私は BG/NBD モデルを使用しています。生存確率を推定するには、まずこのモデルに含まれる 4 つのパラメーター (r、alpha、a、b) を推定する必要があります。これらのパラメータの値を最適化するために、« bbmle » パッケージを使用しています (以下を参照)。
ただし、コードを実行しても結果は得られません。さらに、R は以下の関数に含まれる «オブジェクト» の多くを認識しないようです。
私がコードで行ったエラーに誰も気づきませんか? それを書く別の方法はありますか?
bgLlh <- function(mydata, r, alpha, a, b) {
with (mydata, {
if (a<=0 | b<=0 | r<=0 | alpha<=0) return (NaN)
term1 <-log(gamma(r+mydata$x)) - log(gamma(r)) + r*log(alpha)
term2 <-log(gamma(a+b))+log(gamma(b+mydata$x))-log(gamma(b))-log(gamma(a+b+mydata$x))
term3<- -(r+mydata$x)*log(alpha+mydata$T)
term4 <- if(mydata$x > 1) {log(a)-log(b+mydata$x-1)-(r+mydata$x)*log(alpha+mydata$tx)
} else {0}
llh <- term1 + term2 +log(exp(term3)+(mydata$x>0)*exp(term4))
f <- -sum(llh)
return(f)
})
}
bgEstimateParameters <- function(mydata, initValues, safeMode=FALSE) {
llhd <- function(r, alpha, a, b) {
return (bgLlh(data, r, alpha, a, b))
}
library(bbmle)
if (safeMode) {
fit <- mle2(llhd, initValues, skip.hessian=TRUE, method="Nelder-Mead")
} else {
fit <- mle2(llhd, initValues)
}
return (fit)
}