我正在與生命周期庫合作構建客戶生命周期價值模型。該庫附帶了一個名為的方法,該方法conditional_expected_number_of_purchases_up_to_time允許您預測特定時間段內資料集中每個客戶的購買情況。
這是我正在使用的資料框:
df = pd.DataFrame([[[email protected], 6.0, 112.0, 139.0], [[email protected], 11.0, 130.0, 130.0]], columns=['email', 'frequency', 'recency', 'T'])
資料框中的每一行代表一個單獨的客戶。為了預測每個客戶在接下來的 4 個時期內的預期購買數量,我將執行以下代碼:
t = 4
df['est_purchases'] = mbgf.conditional_expected_number_of_purchases_up_to_time(t, df['frequency'], df['recency'], df['T'])
我現在想要做的是,對于資料框中的每一行,近似計算其余生中剩余購買的總數。我們將此數量稱為剩余客戶購買量 (RCP)。
為此,我定義了兩個函式:第一個函式計算兩個時間段之間的增量 RCP,第二個函式通過增量增加來近似總 RCP,t直到增量 RCP 低于特定的容差水平:
## Function to calculate incremental RCP
def RCP(row):
dif = (mbgf.conditional_expected_number_of_purchases_up_to_time(t,
row['frequency'], row['recency'], row['T'])
- mbgf.conditional_expected_number_of_purchases_up_to_time((t-1),
row['frequency'], row['recency'], row['T']))
return dif
## Create column for incremental RCP
df['m_RCP'] = df.apply(RCP, axis = 1)
## Function to approximate total RCP
def approximate(fn, model, rfm, t=1, eps_tol=1e-6, eps=0, **kwargs):
eps = 0
cf = 0
while True:
cf = df.apply(fn, axis = 1)
if(cf - eps < eps_tol):
break
eps = cf; t =1
return cf
## Create column for total RCP
df['t_RCP'] = df.apply(approximate(RCP, model = mbgf, rfm = df), axis = 1)
第一個功能按預期作業。但是,當我嘗試執行第二個函式 ( approximate) 時,出現此錯誤:
ValueError:系列的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我希望近似函式為單行迭代 RCP 函式,直到 RCP 值不再增加,并對資料幀中的每一行逐行執行此操作。
我做錯了什么,我應該做什么?
uj5u.com熱心網友回復:
您正在呼叫df.apply(fn, axis=1)它回傳一個您分配給的系列cf。然后,您將該系列cf - eps與一個常量進行比較,該常量回傳一個布爾陣列。在導致錯誤的條件運算式中使用布爾陣列是不明確的。
我要做的是定義一個函式iterated_RCP(row),該函式將資料幀的一行作為輸入并在該行上迭代 RCP,直到它收斂。然后你可以做類似的事情df.assign(t_RCP=df.apply(iterated_RCP, axis=1))。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/369390.html
標籤:Python 熊猫 功能 循环 生命周期-python
上一篇:用戶輸入的資訊未注冊到檔案中
