新しく獲得した顧客が R の顧客である期間を分析したいと考えています。データセットは 730 日で右打ち切りされており、10 個の独立変数があります。
モデルは次のようになります: ln(Duration)=X'B+S*e、ここで、X は 10 個の独立変数の行列、B は係数のベクトル、S はスケール パラメーター、e は誤差項です。
私たちが使用する データセットは次のとおりです: http://www.drvkumar.com/books/25/Statistical-Methods-in-Customer-Relationship-Management
サバイバル パッケージとその survreg 関数を使用し、次のコードを入力しました。
Dur <- survreg(Surv(Duration, Censor) ~ Acq_Expense + Acq_Expense_SQ + Ret_Expense + Ret_Expense_SQ + Crossbuy + Frequency + Frequency_SQ + Industry + Revenue + Employees, dist='weibull', data = daten [daten$Acquisition==1, ])
summary(Dur)
しかし、 SAS コードでは別の出力が生成されるため、結果は正しくありません (これは正しいことが確認されています)。
Duration のログ変数を生成しようとし、前述のモデルに新しい変数 logDur を実装しました。
> logDur <- log(daten$Duration)
> Dur <- survreg(Surv(logDur, Censor) ~ Acq_Expense + Acq_Expense_SQ + Ret_Expense + Ret_Expense_SQ + Crossbuy + Frequency + Frequency_SQ + Industry + Revenue + Employees, dist='weibull', data = daten [daten$Acquisition==1, ])
> summary(Dur)
しかし、次のエラーメッセージが表示されました: Fehler in Surv(logDur, Censor) : Time and status are different length length
それが役立つ場合は、SAS コードを次に示します。
proc lifereg data = statcrm.customer_acquisition;
model duration*censor(1) = acq_expense acq_expense_sq ret_expense ret_expense_sq crossbuy frequency frequency_sq industry revenue employees;
where acquisition = 1;
output out = statcrm.duration xbeta = xb p = pred sres = resid;
run; quit;
data statcrm.duration1;
set statcrm.duration;
pred_duration = exp(xb+0.138*(log(-log(1-0.5))));
ad = abs(duration - pred_duration);
ad1 = abs(duration - 333.3165);
run; quit;
proc sql; select mean(duration) from statcrm.duration1 where acquisition = 1 and censor = 0; quit;
proc sql; select mean(ad) as mad, (mean(ad/duration)) as mape,
mean(ad1) as random_mad, (mean(ad1/duration)) as mape1
from statcrm.duration1 where acquisition = 1 and censor = 0; quit;