Advertisement
Pavel_Step

Untitled

Jan 23rd, 2024
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.38 KB | None | 0 0
  1. X = market_total.drop(columns=['Покупательская_активность', 'id'], axis=1)
  2. y = market_total['Покупательская_активность']
  3.  
  4. # разделяем данные на тренировочные и тестовые
  5. X_train, X_test, y_train, y_test = train_test_split(
  6. X,
  7. y,
  8. test_size=TEST_SIZE,
  9. random_state=RANDOM_STATE,
  10. stratify=y
  11. )
  12.  
  13. # создаём списки с названиями признаков
  14. ohe_columns = ['Тип_сервиса', 'Разрешить_сообщать']
  15. ord_columns = ['Популярная_категория']
  16. num_columns = ['Маркет_актив_6_мес', 'Маркет_актив_тек_мес', 'Длительность',
  17. 'Акционные_покупки', 'Средний_просмотр_категорий_за_визит',
  18. 'Неоплаченные_продукты_штук_квартал','Ошибка_сервиса',
  19. 'Страниц_за_визит', 'Выручка_текущий_месяц', 'Выручка_предыдущий_месяц',
  20. 'Выручка_пред_предыдущий_месяц', 'Минут_предыдущий_месяц', 'Минут_текущий_месяц']
  21.  
  22. # создаём пайплайн для подготовки признаков из списка ohe_columns
  23. ohe_pipe = Pipeline(
  24. [('simpleImputer_ohe', SimpleImputer(missing_values=np.nan, strategy='most_frequent')),
  25. ('ohe', OneHotEncoder(drop='firts', handle_unknown='ignore', sparse=False))
  26. ]
  27. )
  28.  
  29. # создаём пайплайн для подготовки признаков из списка ord_columns
  30. ord_pipe = Pipeline(
  31. [('simpleImputer_befor_ord', SimpleImputer(missing_values=np.nan, strategy='most_frequent')),
  32. ('ord', OrdinalEncoder(
  33. categories=[
  34. ['Кухонная посуда', 'Мелкая бытовая техника и электроника',
  35. 'Техника для красоты и здоровья', 'Косметика и аксесуары',
  36. 'Домашний текстиль', 'Товары для детей']
  37. ],
  38. handle_unknown='use_encoded_value', unknown_value=np.nan
  39. )
  40. ),
  41. ('simpleImputer_after_ord', SimpleImputer(missing_values=np, strategy='most_frequent'))
  42. ]
  43. )
  44.  
  45. # создаём общий пайплайн для подготовки данных
  46. data_preprocessor = ColumnTransformer(
  47. [('ohe', ohe_pipe, ohe_columns),
  48. ('ord', ord_pipe, ord_columns),
  49. ('num', StandardScaler(), num_columns)
  50. ],
  51. remainder='passthrough'
  52. )
  53.  
  54. # создаём итоговый пайплайн: подготовка данных и модель
  55. pipe_final = Pipeline([
  56. ('preprocessor', data_preprocessor),
  57. ('models', DecisionTreeClassifier(random_state=RANDOM_STATE))
  58. ])
  59.  
  60. param_grid = [
  61. {
  62. 'models': [DecisionTreeClassifier(random_state=RANDOM_STATE)],
  63. 'models__max_depth': range(2, 7),
  64. 'models__max_features': range(2, 7),
  65. 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
  66. },
  67.  
  68. {
  69. 'models': [KNeighborsClassifier()],
  70. 'models__n_neighbors': range(2, 7),
  71. 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
  72. },
  73.  
  74. {
  75. 'models': [LogisticRegression(
  76. random_state=RANDOM_STATE,
  77. solver='liblinear',
  78. penalty='l1'
  79. )],
  80. 'model__C': range(1, 6),
  81. 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
  82. },
  83.  
  84. {
  85. 'models': [SVC(kernel='rbf')],
  86. 'models__degree': range(2, 5),
  87. 'models__C': range(1, 10),
  88. 'models__gamma': range(1, 10),
  89. 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
  90. }
  91. ]
  92.  
  93. randomized_search = RandomizedSearchCV(
  94. pipe_final,
  95. param_grid,
  96. cv=5,
  97. scoring='roc_auc',
  98. random_state=RANDOM_STATE,
  99. n_jobs=-1
  100. )
  101.  
  102. randomized_search.fit(X_train, y_train)
  103.  
  104. y_test_pred = randomized_search.predict(X_test)
  105.  
  106. print('Лучшая модель и её параметры:\n\n', randomized_search.best_estimator_)
  107. print ('Метрика лучшей модели на тренировочной выборке:', randomized_search.best_score_)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement