Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- X = market_total.drop(columns=['Покупательская_активность', 'id'], axis=1)
- y = market_total['Покупательская_активность']
- # разделяем данные на тренировочные и тестовые
- X_train, X_test, y_train, y_test = train_test_split(
- X,
- y,
- test_size=TEST_SIZE,
- random_state=RANDOM_STATE,
- stratify=y
- )
- # создаём списки с названиями признаков
- ohe_columns = ['Тип_сервиса', 'Разрешить_сообщать']
- ord_columns = ['Популярная_категория']
- num_columns = ['Маркет_актив_6_мес', 'Маркет_актив_тек_мес', 'Длительность',
- 'Акционные_покупки', 'Средний_просмотр_категорий_за_визит',
- 'Неоплаченные_продукты_штук_квартал','Ошибка_сервиса',
- 'Страниц_за_визит', 'Выручка_текущий_месяц', 'Выручка_предыдущий_месяц',
- 'Выручка_пред_предыдущий_месяц', 'Минут_предыдущий_месяц', 'Минут_текущий_месяц']
- # создаём пайплайн для подготовки признаков из списка ohe_columns
- ohe_pipe = Pipeline(
- [('simpleImputer_ohe', SimpleImputer(missing_values=np.nan, strategy='most_frequent')),
- ('ohe', OneHotEncoder(drop='firts', handle_unknown='ignore', sparse=False))
- ]
- )
- # создаём пайплайн для подготовки признаков из списка ord_columns
- ord_pipe = Pipeline(
- [('simpleImputer_befor_ord', SimpleImputer(missing_values=np.nan, strategy='most_frequent')),
- ('ord', OrdinalEncoder(
- categories=[
- ['Кухонная посуда', 'Мелкая бытовая техника и электроника',
- 'Техника для красоты и здоровья', 'Косметика и аксесуары',
- 'Домашний текстиль', 'Товары для детей']
- ],
- handle_unknown='use_encoded_value', unknown_value=np.nan
- )
- ),
- ('simpleImputer_after_ord', SimpleImputer(missing_values=np, strategy='most_frequent'))
- ]
- )
- # создаём общий пайплайн для подготовки данных
- data_preprocessor = ColumnTransformer(
- [('ohe', ohe_pipe, ohe_columns),
- ('ord', ord_pipe, ord_columns),
- ('num', StandardScaler(), num_columns)
- ],
- remainder='passthrough'
- )
- # создаём итоговый пайплайн: подготовка данных и модель
- pipe_final = Pipeline([
- ('preprocessor', data_preprocessor),
- ('models', DecisionTreeClassifier(random_state=RANDOM_STATE))
- ])
- param_grid = [
- {
- 'models': [DecisionTreeClassifier(random_state=RANDOM_STATE)],
- 'models__max_depth': range(2, 7),
- 'models__max_features': range(2, 7),
- 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
- },
- {
- 'models': [KNeighborsClassifier()],
- 'models__n_neighbors': range(2, 7),
- 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
- },
- {
- 'models': [LogisticRegression(
- random_state=RANDOM_STATE,
- solver='liblinear',
- penalty='l1'
- )],
- 'model__C': range(1, 6),
- 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
- },
- {
- 'models': [SVC(kernel='rbf')],
- 'models__degree': range(2, 5),
- 'models__C': range(1, 10),
- 'models__gamma': range(1, 10),
- 'preprocessor__num': [StandardScaler(), MinMaxScaler(), 'passthrough']
- }
- ]
- randomized_search = RandomizedSearchCV(
- pipe_final,
- param_grid,
- cv=5,
- scoring='roc_auc',
- random_state=RANDOM_STATE,
- n_jobs=-1
- )
- randomized_search.fit(X_train, y_train)
- y_test_pred = randomized_search.predict(X_test)
- print('Лучшая модель и её параметры:\n\n', randomized_search.best_estimator_)
- print ('Метрика лучшей модели на тренировочной выборке:', randomized_search.best_score_)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement