воскресенье, 17 марта 2024 г.

Что необходимо для выделения когорты

  • изначально объединяющее событие (первое посещение сайта, регистрация или скачивание мобильного приложения. Так в анализ попадает только определённая категория людей — впервые посетившие сайт, зарегистрированные в программе лояльности, пользователи приложения.)
  • время
  • дополнительный признак (может отсутствовать)

Обычно BI системы ведут два основных журнала:
  • журнал посещений
    • uid
    • дата начала сессии
    • длительность (или дата окончания)
    • другие параметры (устройство, география, источник и т.п.)
  • журнал покупок
    • uid
    • дата покупки
    • сумма
    • м.б. состав покупки

Ниже на основании журналов подготовим профили пользователей для когортного анализа. 

import pandas as pd

sessions = pd.read_csv('sessions.csv')  #https://drive.google.com/file/d/1mM4m4W_jWH8KqicHjJguw70ViO5_ldgK/view?usp=share_link
sessions['session_start'] = pd.to_datetime(sessions['session_start'])

orders = pd.read_csv('book_orders.csv')  #https://drive.google.com/file/d/1BRxsxvtYXrADqD6fXd_YqXgo4xiXeCRb/view?usp=share_link
orders['event_dt'] = pd.to_datetime(orders['event_dt'])

# добавили второй аргумент
def get_profiles(sessions, orders=None):

    profiles = (
        sessions.sort_values(by=['user_id', 'session_start'])
        .groupby('user_id')
        .agg(
            {
                'session_start': 'first',
                'channel': 'first',
                'device': 'first',
                'region': 'first',
                # другие параметры
            }
        )
        .rename(columns={'session_start': 'first_ts'})
        .reset_index()
    )

    profiles['dt'] = profiles['first_ts'].dt.date
    profiles['month'] = profiles['first_ts'].to_numpy().astype('datetime64[M]')
    
    # проверьте, есть ли ID пользователей из profiles в orders
    if orders is not None:
        payers = set(orders.user_id.unique())
        profiles['payer'] = profiles['user_id'].map(lambda x: True if x in payers else False)

    return profiles

# строим профили по двум наборам данных
profiles = get_profiles(sessions, orders)

print(profiles)

Комментариев нет:

Отправить комментарий