Проблемы
У меня есть данные о транзакциях каждого клиента за 31 день до того, как они уйдут (у некоторых клиентов меньше 31 дня) в Dataframe Как преобразовать его в 3D-массив и площадку с 0 для Keras RNN? и Убедитесь, что он совпадает с другим фреймом данных цели
Структура данных
Этот образец игрушки для работы
df = pd.DataFrame({
'Customer_id' : [112]*27 + [223]*31 + [256]*30
,'DATE' : np.concatenate([np.concatenate([np.arange(20200701,20200728) , np.arange(20200501,20200532)]), np.arange(20200501,20200531)])
,'Last_date_before_churn' :[20200727]*27 + [20200531]*31 + [20200530]*30
,'Feature1':np.random.uniform(0.1,0.9,88)
,'Feature2':np.random.uniform(0.1,0.9,88)
})
# edit to replicate actual data
df = df.drop(15,axis = 0)
target = pd.DataFrame({
'Customer_id' : [256,112,223]
,'IS_Churn':[1,0,1]
})
У нас 3 клиента [ 112 223 256]. У 112 есть 27 дней до того, как он перестанет работать, а у 223 есть 31 день до того, как он перестанет работать. Текущая форма - (88, 4), но нам нужно изменить форму на (3,31,2) -> 3 клиента, 31 временной шаг и 2 функции. Таким образом, третье измерение - это каждый Customer_id, который соответствует целевому фрейму данных
Другая сложная часть -
, у каждого клиента свой диапазон дат. в то время как мы можем посмотреть на «Last_date_before_churn» - это последняя дата в диапазоне 31 день. например, последняя дата для клиента 112 - 27 июля, у нас могут быть данные единственной даты с 1 июля по 15 июля, а затем с 17 июля по 27 июля. Таким образом, мы должны добавить дату с 27 июня на 30 июня, а затем также на 16 июля, чтобы она стала 31 день
То, что я пробовал
Я пробовал использовать для l oop, но потребовалось навсегда для моих фактических данных из 27 928 258 строк набора данных
result = []
for index, Cid in enumerate(df.Customer_id.unique()):
result.append(df[df['Customer_id'] == Cid].iloc[:, :])