Untitled

From Silly Bat, 2 Months ago, written in Plain Text, viewed 60 times.
URL http://codebin.org/view/38843ea3 Embed
Download Paste or View Raw
  1. # функция для визуализации LTV и ROI
  2.  
  3. def plot_ltv_roi(ltv, ltv_history, roi, roi_history, horizon, window=7):
  4.  
  5.     # задаём сетку отрисовки графиков
  6.     plt.figure(figsize=(20, 10))
  7.  
  8.     # из таблицы ltv исключаем размеры когорт
  9.     ltv = ltv.drop(columns=['cohort_size'])
  10.     # в таблице динамики ltv оставляем только нужный лайфтайм
  11.     ltv_history = ltv_history.drop(columns=['cohort_size'])[[horizon - 1]]
  12.  
  13.     # стоимость привлечения запишем в отдельный фрейм
  14.     cac_history = roi_history[['cac']]
  15.  
  16.     # из таблицы roi исключаем размеры когорт и cac
  17.     roi = roi.drop(columns=['cohort_size', 'cac'])
  18.     # в таблице динамики roi оставляем только нужный лайфтайм
  19.     roi_history = roi_history.drop(columns=['cohort_size', 'cac'])[
  20.         [horizon - 1]
  21.     ]
  22.  
  23.     # первый график — кривые ltv
  24.     ax1 = plt.subplot(2, 3, 1)
  25.     ltv.T.plot(grid=True, ax=ax1)
  26.     plt.legend()
  27.     plt.xlabel('Лайфтайм')
  28.     plt.title('LTV')
  29.  
  30.     # второй график — динамика ltv
  31.     ax2 = plt.subplot(2, 3, 2, sharey=ax1)
  32.     # столбцами сводной таблицы станут все столбцы индекса, кроме даты
  33.     columns = [name for name in ltv_history.index.names if name not in ['dt']]
  34.     filtered_data = ltv_history.pivot_table(
  35.         index='dt', columns=columns, values=horizon - 1, aggfunc='mean'
  36.     )
  37.     filter_data(filtered_data, window).plot(grid=True, ax=ax2)
  38.     plt.xlabel('Дата привлечения')
  39.     plt.title('Динамика LTV пользователей на {}-й день'.format(horizon))
  40.  
  41.     # третий график — динамика cac
  42.     ax3 = plt.subplot(2, 3, 3, sharey=ax1)
  43.     # столбцами сводной таблицы станут все столбцы индекса, кроме даты
  44.     columns = [name for name in cac_history.index.names if name not in ['dt']]
  45.     filtered_data = cac_history.pivot_table(
  46.         index='dt', columns=columns, values='cac', aggfunc='mean'
  47.     )
  48.     filter_data(filtered_data, window).plot(grid=True, ax=ax3)
  49.     plt.xlabel('Дата привлечения')
  50.     plt.title('Динамика стоимости привлечения пользователей')
  51.  
  52.     # четвёртый график — кривые roi
  53.     ax4 = plt.subplot(2, 3, 4)
  54.     roi.T.plot(grid=True, ax=ax4)
  55.     plt.axhline(y=1, color='red', linestyle='--', label='Уровень окупаемости')
  56.     plt.legend()
  57.     plt.xlabel('Лайфтайм')
  58.     plt.title('ROI')
  59.  
  60.     # пятый график — динамика roi
  61.     ax5 = plt.subplot(2, 3, 5, sharey=ax4)
  62.     # столбцами сводной таблицы станут все столбцы индекса, кроме даты
  63.     columns = [name for name in roi_history.index.names if name not in ['dt']]
  64.     filtered_data = roi_history.pivot_table(
  65.         index='dt', columns=columns, values=horizon - 1, aggfunc='mean'
  66.     )
  67.     filter_data(filtered_data, window).plot(grid=True, ax=ax5)
  68.     plt.axhline(y=1, color='red', linestyle='--', label='Уровень окупаемости')
  69.     plt.xlabel('Дата привлечения')
  70.     plt.title('Динамика ROI пользователей на {}-й день'.format(horizon))
  71.  
  72.     plt.tight_layout()
  73.     plt.show()

Reply to "Untitled"

Here you can reply to the paste above