HardWorkingStation commited on
Commit
0546d21
·
1 Parent(s): f496f49

Initial commit

Browse files
src/model_predictions/{ct_cbc.csv → catboost/ct_cbc.csv} RENAMED
File without changes
src/model_predictions/{sm_cbc.csv → catboost/sm_cbc.csv} RENAMED
File without changes
src/model_predictions/{tm_dependend_cbc.csv → catboost/tm_dependend_cbc.csv} RENAMED
File without changes
src/model_predictions/{tm_independend_cbc.csv → catboost/tm_independend_cbc.csv} RENAMED
File without changes
src/model_predictions/random_forest/tm_rfc.csv ADDED
The diff for this file is too large to render. See raw diff
 
src/model_predictions/xgboost/sm_xgb.csv ADDED
The diff for this file is too large to render. See raw diff
 
src/test.ipynb CHANGED
The diff for this file is too large to render. See raw diff
 
src/web_app.py CHANGED
@@ -13,10 +13,14 @@ import tools
13
  dataset, target, treatment = tools.get_data()
14
 
15
  # загрузим предикты моделей
16
- ct_cbc = pd.read_csv('src/model_predictions/ct_cbc.csv', index_col='Unnamed: 0')
17
- sm_cbc = pd.read_csv('src/model_predictions/sm_cbc.csv', index_col='Unnamed: 0')
18
- tm_dependend_cbc = pd.read_csv('src/model_predictions/tm_dependend_cbc.csv', index_col='Unnamed: 0')
19
- tm_independend_cbc = pd.read_csv('src/model_predictions/tm_independend_cbc.csv', index_col='Unnamed: 0')
 
 
 
 
20
 
21
  # загрузим данные
22
  data_train_index = pd.read_csv('data/data_train_index.csv')
@@ -242,36 +246,160 @@ if show_ml_reasons:
242
  catboost_uplift_by_percentile = uplift_by_percentile(target_filtered, final_uplift, treatment_filtered)
243
  catboost_qini_auc_score = qini_auc_score(target_filtered, final_uplift, treatment_filtered)
244
  catboost_weighted_average_uplift = tools.get_weighted_average_uplift(target_filtered, final_uplift, treatment_filtered)
245
- qini_curve_score = qini_curve(target_filtered, final_uplift, treatment_filtered)
246
 
247
  # отображаем метрики
248
  col1, col2, col3 = st.columns(3)
249
- col1.metric(label=f'Uplift для {k}% пользователей', value=f'{catboost_uplift_at_k:.4f}', delta=f'{catboost_uplift_at_k - user_metric_uplift_at_k:.4f}')
250
- col2.metric(label=f'Qini AUC score', value=f'{catboost_qini_auc_score:.4f}', help='Всегда будет 0 для пользователя', delta=f'{catboost_qini_auc_score - user_metric_qini_auc_score:.4f}')
251
- col3.metric(label=f'Weighted average uplift', value=f'{catboost_weighted_average_uplift:.4f}', delta=f'{catboost_weighted_average_uplift - user_metric_weighted_average_uplift:.4f}')
 
 
 
 
 
 
 
 
 
 
 
 
 
252
 
253
  st.write('Uplift по процентилям')
254
  st.write(catboost_uplift_by_percentile)
255
  st.form_submit_button('Обновить графики', help='При изменении флагов')
 
256
  perfect_qini = st.checkbox('Отрисовать идеальную метрику qini')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
 
 
258
  # получаем координаты пользовательской метрики для точки на графике
259
  x, y = qini_curve_user_score[0][1], qini_curve_user_score[1][1]
260
  # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
261
- fig = plot_qini_curve(target_test, sm_cbc['0'], treatment_test, perfect=perfect_qini)
262
  # добавляем пользовательскую метрику на оси графика
263
- fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
264
  # добавляем обозначение метрики пользователя в легенду
265
- fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
266
- st.pyplot(fig.figure_)
 
267
  prefect_uplift = st.checkbox('Отрисовать идеальную метрику uplift')
 
 
 
 
 
 
 
 
 
268
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269
  # получаем координаты пользовательской метрики для точки на графике
270
  x, y = uplift_curve_user_score[0][1], uplift_curve_user_score[1][1]
271
  # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
272
- fig = plot_uplift_curve(target_test, sm_cbc['0'], treatment_test, perfect=perfect_qini)
273
  # добавляем пользовательскую метрику на оси графика
274
- fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
275
  # добавляем обозначение метрики пользователя в легенду
276
- fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
277
- st.pyplot(fig.figure_)
 
13
  dataset, target, treatment = tools.get_data()
14
 
15
  # загрузим предикты моделей
16
+ ct_cbc = pd.read_csv('src/model_predictions/catboost/ct_cbc.csv', index_col='Unnamed: 0')
17
+ sm_cbc = pd.read_csv('src/model_predictions/catboost/sm_cbc.csv', index_col='Unnamed: 0')
18
+ tm_dependend_cbc = pd.read_csv('src/model_predictions/catboost/tm_dependend_cbc.csv', index_col='Unnamed: 0')
19
+ tm_independend_cbc = pd.read_csv('src/model_predictions/catboost/tm_independend_cbc.csv', index_col='Unnamed: 0')
20
+
21
+ tm_rfc = pd.read_csv('src/model_predictions/random_forest/tm_rfc.csv', index_col='Unnamed: 0')
22
+
23
+ sm_xgboost = pd.read_csv('src/model_predictions/xgboost/sm_xgb.csv', index_col='Unnamed: 0')
24
 
25
  # загрузим данные
26
  data_train_index = pd.read_csv('data/data_train_index.csv')
 
246
  catboost_uplift_by_percentile = uplift_by_percentile(target_filtered, final_uplift, treatment_filtered)
247
  catboost_qini_auc_score = qini_auc_score(target_filtered, final_uplift, treatment_filtered)
248
  catboost_weighted_average_uplift = tools.get_weighted_average_uplift(target_filtered, final_uplift, treatment_filtered)
 
249
 
250
  # отображаем метрики
251
  col1, col2, col3 = st.columns(3)
252
+ col1.metric(
253
+ label=f'Uplift для {k}% пользователей',
254
+ value=f'{catboost_uplift_at_k:.4f}',
255
+ delta=f'{catboost_uplift_at_k - user_metric_uplift_at_k:.4f}'
256
+ )
257
+ col2.metric(
258
+ label=f'Qini AUC score',
259
+ value=f'{catboost_qini_auc_score:.4f}',
260
+ help='Всегда будет 0 для пользователя',
261
+ delta=f'{catboost_qini_auc_score - user_metric_qini_auc_score:.4f}'
262
+ )
263
+ col3.metric(
264
+ label=f'Weighted average uplift',
265
+ value=f'{catboost_weighted_average_uplift:.4f}',
266
+ delta=f'{catboost_weighted_average_uplift - user_metric_weighted_average_uplift:.4f}'
267
+ )
268
 
269
  st.write('Uplift по процентилям')
270
  st.write(catboost_uplift_by_percentile)
271
  st.form_submit_button('Обновить графики', help='При изменении флагов')
272
+
273
  perfect_qini = st.checkbox('Отрисовать идеальную метрику qini')
274
+ # получаем координаты пользовательской метрики для точки на графике
275
+ x, y = qini_curve_user_score[0][1], qini_curve_user_score[1][1]
276
+ # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
277
+ qini_fig = plot_qini_curve(target_test, sm_cbc['0'], treatment_test, perfect=perfect_qini)
278
+ # добавляем пользовательскую метрику на оси графика
279
+ qini_fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
280
+ # добавляем обозначение метрики пользователя в легенду
281
+ qini_fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
282
+ st.pyplot(qini_fig.figure_)
283
+
284
+ prefect_uplift = st.checkbox('Отрисовать идеальную метрику uplift')
285
+ # получаем координаты пользовательской метрики для точки на графике
286
+ x, y = uplift_curve_user_score[0][1], uplift_curve_user_score[1][1]
287
+ # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
288
+ uplift_fig = plot_uplift_curve(target_test, sm_cbc['0'], treatment_test, perfect=prefect_uplift)
289
+ # добавляем пользовательскую метрику на оси графика
290
+ uplift_fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
291
+ # добавляем обозначение метрики пользователя в легенду
292
+ uplift_fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
293
+ st.pyplot(uplift_fig.figure_)
294
+
295
+ with st.expander('Решение с помощью Random forest (sklearn)'):
296
+ with st.form(key='sklearn_metricks'):
297
+
298
+ final_rf_uplift = tm_rfc.loc[filtered_dataset.index]['0']
299
+
300
+ # считаем метрики для ML
301
+ random_forest_uplift_at_k = uplift_at_k(target_filtered, final_rf_uplift, treatment_filtered, strategy='overall', k=k)
302
+ random_forest_uplift_by_percentile = uplift_by_percentile(target_filtered, final_rf_uplift, treatment_filtered)
303
+ random_forest_qini_auc_score = qini_auc_score(target_filtered, final_rf_uplift, treatment_filtered)
304
+ random_forest_weighted_average_uplift = tools.get_weighted_average_uplift(target_filtered, final_rf_uplift, treatment_filtered)
305
+
306
+ # отображаем метрики
307
+ col1, col2, col3 = st.columns(3)
308
+ col1.metric(
309
+ label=f'Uplift для {k}% пользователей',
310
+ value=f'{random_forest_uplift_at_k:.4f}',
311
+ delta=f'{random_forest_uplift_at_k - user_metric_uplift_at_k:.4f}'
312
+ )
313
+ col2.metric(
314
+ label=f'Qini AUC score',
315
+ value=f'{random_forest_qini_auc_score:.4f}',
316
+ help='Всегда будет 0 для пользователя',
317
+ delta=f'{random_forest_qini_auc_score - user_metric_qini_auc_score:.4f}'
318
+ )
319
+ col3.metric(
320
+ label=f'Weighted average uplift',
321
+ value=f'{random_forest_weighted_average_uplift:.4f}',
322
+ delta=f'{random_forest_weighted_average_uplift - user_metric_weighted_average_uplift:.4f}'
323
+ )
324
+
325
+ st.write('Uplift по процентилям')
326
+ st.write(random_forest_uplift_by_percentile)
327
+ st.form_submit_button('Обновить графики', help='При изменении флагов')
328
 
329
+ perfect_qini = st.checkbox('Отрисовать идеальную метрику qini')
330
  # получаем координаты пользовательской метрики для точки на графике
331
  x, y = qini_curve_user_score[0][1], qini_curve_user_score[1][1]
332
  # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
333
+ qini_fig = plot_qini_curve(target_test, tm_rfc['0'], treatment_test, perfect=perfect_qini)
334
  # добавляем пользовательскую метрику на оси графика
335
+ qini_fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
336
  # добавляем обозначение метрики пользователя в легенду
337
+ qini_fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
338
+ st.pyplot(qini_fig.figure_)
339
+
340
  prefect_uplift = st.checkbox('Отрисовать идеальную метрику uplift')
341
+ # получаем координаты пользовательской метрики для точки на графике
342
+ x, y = uplift_curve_user_score[0][1], uplift_curve_user_score[1][1]
343
+ # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
344
+ uplift_fig = plot_uplift_curve(target_test, tm_rfc['0'], treatment_test, perfect=prefect_uplift)
345
+ # добавляем пользовательскую метрику на оси графика
346
+ uplift_fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
347
+ # добавляем обозначение метрики пользователя в легенду
348
+ uplift_fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
349
+ st.pyplot(uplift_fig.figure_)
350
 
351
+ with st.expander('Решение с помощью XGBoost'):
352
+ with st.form(key='xgboost_metricks'):
353
+
354
+ final_xgboost_uplift = sm_xgboost.loc[filtered_dataset.index]['0']
355
+
356
+ # считаем метрики для ML
357
+ xgboost_uplift_at_k = uplift_at_k(target_filtered, final_xgboost_uplift, treatment_filtered, strategy='overall', k=k)
358
+ xgboost_uplift_by_percentile = uplift_by_percentile(target_filtered, final_xgboost_uplift, treatment_filtered)
359
+ xgboost_qini_auc_score = qini_auc_score(target_filtered, final_xgboost_uplift, treatment_filtered)
360
+ xgboost_weighted_average_uplift = tools.get_weighted_average_uplift(target_filtered, final_xgboost_uplift, treatment_filtered)
361
+
362
+ # отображаем метрики
363
+ col1, col2, col3 = st.columns(3)
364
+ col1.metric(
365
+ label=f'Uplift для {k}% пользователей',
366
+ value=f'{xgboost_uplift_at_k:.4f}',
367
+ delta=f'{xgboost_uplift_at_k - user_metric_uplift_at_k:.4f}'
368
+ )
369
+ col2.metric(
370
+ label=f'Qini AUC score',
371
+ value=f'{xgboost_qini_auc_score:.4f}',
372
+ help='Всегда будет 0 для пользователя',
373
+ delta=f'{xgboost_qini_auc_score - user_metric_qini_auc_score:.4f}'
374
+ )
375
+ col3.metric(
376
+ label=f'Weighted average uplift',
377
+ value=f'{xgboost_weighted_average_uplift:.4f}',
378
+ delta=f'{xgboost_weighted_average_uplift - user_metric_weighted_average_uplift:.4f}'
379
+ )
380
+
381
+ st.write('Uplift по процентилям')
382
+ st.write(xgboost_uplift_by_percentile)
383
+ st.form_submit_button('Обновить графики', help='При изменении флагов')
384
+
385
+ perfect_qini = st.checkbox('Отрис��вать идеальную метрику qini')
386
+ # получаем координаты пользовательской метрики для точки на графике
387
+ x, y = qini_curve_user_score[0][1], qini_curve_user_score[1][1]
388
+ # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
389
+ qini_fig = plot_qini_curve(target_test, sm_xgboost['0'], treatment_test, perfect=perfect_qini)
390
+ # добавляем пользовательскую метрику на оси графика
391
+ qini_fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
392
+ # добавляем обозначение метрики пользователя в легенду
393
+ qini_fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
394
+ st.pyplot(qini_fig.figure_)
395
+
396
+ prefect_uplift = st.checkbox('Отрисовать идеальную метрику uplift')
397
  # получаем координаты пользовательской метрики для точки на графике
398
  x, y = uplift_curve_user_score[0][1], uplift_curve_user_score[1][1]
399
  # получаем объект UpliftCurveDisplay с осями и графиком matplotlib
400
+ uplift_fig = plot_uplift_curve(target_test, sm_xgboost['0'], treatment_test, perfect=prefect_uplift)
401
  # добавляем пользовательскую метрику на оси графика
402
+ uplift_fig.ax_.plot(x, y, 'ro', markersize=3, label='Analitic qini')
403
  # добавляем обозначение метрики пользователя в легенду
404
+ uplift_fig.ax_.legend(loc=u'upper left', bbox_to_anchor=(1, 1))
405
+ st.pyplot(uplift_fig.figure_)