Untitled

From Sweltering Dove, 2 Months ago, written in Plain Text, viewed 51 times.
URL http://codebin.org/view/37b2534d Embed
Download Paste or View Raw
  1. def get_profiles(sessions, orders, ad_costs):
  2.     # Шаг 1. Передадим в функцию расчета профиля данные о рекламных затратах (фрейм ad_costs)
  3.    
  4.     # сортируем сессии по id пользователя и дате для того,чтобы работал first
  5.     # находим первые значения для параметров пользователя - будем считать их основными
  6.     profiles = (sessions.sort_values(by = ['user_id', 'session_start'])          
  7.                         .groupby('user_id').agg({'session_start' : 'first',      
  8.                                                  'channel': 'first',
  9.                                                  'device': 'first',
  10.                                                  'region': 'first'})                                
  11.                         .rename(columns = {'session_start' : 'first_ts'})  
  12.                         .reset_index()  # вернем все данные из индекса в колонки                                          
  13.                )
  14.     # определим дату первого посещеня
  15.     # и начало месяца первого посещения - они понадобятся нам при когортном анализе
  16.     profiles['dt'] = profiles['first_ts'].dt.date                                
  17.     profiles['month'] = profiles['first_ts'].astype('datetime64[M]')    
  18.    
  19.     # добавляем признак платящих пользователей
  20.     profiles['payer'] = profiles['user_id'].isin(orders['user_id'].unique())  
  21.            
  22.     # Шаг 2. К данным о рекламных затратах добавим количества привлеченных пользователей
  23.     new_users = profiles.groupby(['dt', 'channel']).agg({'user_id': 'nunique'}).rename(columns = {'user_id': 'unique_users'}).reset_index()
  24.     ad_costs = ad_costs.merge(new_users, on = ['dt', 'channel'], how = 'left')
  25.    
  26.     # Шаг 3. Найдем среднюю стоимость привлечения пользователя
  27.     ad_costs['acquisition_cost'] = ad_costs['costs'] / ad_costs['unique_users']
  28.    
  29.     # Шаг 4. Присоединим данные к профилям пользователей информацию о средней стоимости привлечения в день привлечения пользователя из нужного источника
  30.     profiles = profiles.merge(ad_costs[['dt', 'channel', 'acquisition_cost']], on = ['dt', 'channel'], how = 'left')
  31.     profiles['acquisition_cost'] = profiles['acquisition_cost'].fillna(0) # органические пользователи будут стоить 0
  32.    
  33.     return profiles

Reply to "Untitled"

Here you can reply to the paste above