Какие модели машинного обучения обучал?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Модели машинного обучения в работе Data Analyst
Machine Learning — это не основная роль Data Analyst, но знание базовых моделей критично для аналитики. Я работал с классическими алгоритмами, которые решают практические задачи без необходимости deep learning.
1. Линейная регрессия (Linear Regression)
Основная модель для предсказания непрерывных значений.
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# Данные
X = df[['age', 'experience', 'education_years']]
y = df['salary']
# Разделение на train/test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Обучение
model = LinearRegression()
model.fit(X_train, y_train)
# Предсказание
y_pred = model.predict(X_test)
# Оценка
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)
print(f"RMSE: {rmse:.2f}, R²: {r2:.4f}")
# Коэффициенты
for feature, coef in zip(X.columns, model.coef_):
print(f"{feature}: {coef:.4f}")
Применение: Прогноз зарплаты, продаж, расходов по историческим данным.
2. Логистическая регрессия (Logistic Regression)
Для предсказания вероятностей (бинарная классификация).
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, roc_auc_score, roc_curve
# Задача: предсказать, купит ли пользователь (0/1)
X = df[['age', 'income', 'browsing_time']]
y = df['purchased'] # 0 или 1
# Обучение
model = LogisticRegression()
model.fit(X, y)
# Вероятности
y_proba = model.predict_proba(X_test)[:, 1]
# ROC-AUC
auc = roc_auc_score(y_test, y_proba)
print(f"ROC-AUC: {auc:.4f}")
# Матрица ошибок
cm = confusion_matrix(y_test, model.predict(X_test))
print(cm)
Применение: Вероятность конверсии, сценариев по умолчанию, оттока пользователей.
3. Дерево решений (Decision Tree)
Интерпретируемая модель для классификации и регрессии.
from sklearn.tree import DecisionTreeClassifier, plot_tree
# Классификация (бинарная)
X = df[['age', 'income', 'credit_score']]
y = df['loan_approved'] # 0 или 1
model = DecisionTreeClassifier(max_depth=5, random_state=42)
model.fit(X, y)
# Визуализация дерева
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 10))
plot_tree(model, feature_names=X.columns, class_names=['Denied', 'Approved'])
plt.show()
# Важность признаков
for feature, importance in zip(X.columns, model.feature_importances_):
print(f"{feature}: {importance:.4f}")
# Предсказание
y_pred = model.predict(X_test)
accuracy = (y_pred == y_test).mean()
print(f"Accuracy: {accuracy:.4f}")
Применение: Сегментация пользователей, простые правила бизнеса, анализ важности признаков.
4. Random Forest
Энсамбль деревьев для более стабильных предсказаний.
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
# Классификация
rf_model = RandomForestClassifier(
n_estimators=100,
max_depth=10,
min_samples_split=5,
random_state=42,
n_jobs=-1 # все ядра процессора
)
rf_model.fit(X_train, y_train)
y_pred = rf_model.predict(X_test)
accuracy = (y_pred == y_test).mean()
# Регрессия
rf_reg = RandomForestRegressor(n_estimators=100)
rf_reg.fit(X_train, y_train)
rmse = np.sqrt(mean_squared_error(y_test, rf_reg.predict(X_test)))
# Важность признаков
feature_importance = pd.DataFrame({
'feature': X.columns,
'importance': rf_model.feature_importances_
}).sort_values('importance', ascending=False)
print(feature_importance)
Применение: Предсказание конверсии/оттока, оценка кредитоспособности, аномалии.
5. Gradient Boosting (XGBoost, LightGBM)
Мощные модели для конкурентных задач.
import xgboost as xgb
from xgboost import XGBClassifier, XGBRegressor
# Классификация
model = XGBClassifier(
n_estimators=100,
max_depth=5,
learning_rate=0.1,
subsample=0.8,
colsample_bytree=0.8,
random_state=42
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = (y_pred == y_test).mean()
# Регрессия
xgb_reg = XGBRegressor()
xgb_reg.fit(X_train, y_train)
y_pred = xgb_reg.predict(X_test)
# Feature importance
feature_imp = pd.DataFrame({
'feature': X.columns,
'importance': model.feature_importances_
}).sort_values('importance', ascending=False)
Применение: Прогноз LTV, скоринг рисков, аномалии в данных, кластеризация.
6. K-Means кластеризация
Для разделения данных на группы.
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# Данные требуют нормализации
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Выбор оптимального K через elbow method
inertias = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
inertias.append(kmeans.inertia_)
plt.plot(range(1, 11), inertias)
plt.xlabel('K')
plt.ylabel('Inertia')
plt.show()
# Обучение с оптимальным K
kmeans = KMeans(n_clusters=3, random_state=42)
df['cluster'] = kmeans.fit_predict(X_scaled)
# Анализ кластеров
print(df.groupby('cluster')[['age', 'income', 'purchases']].mean())
Применение: Сегментация пользователей, определение типов клиентов, анализ RFM.
7. DBSCAN
Для обнаружения аномалий и плотностной кластеризации.
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
dbscan = DBSCAN(eps=0.5, min_samples=5)
df['cluster'] = dbscan.fit_predict(X_scaled)
# -1 означает выброс
anomalies = df[df['cluster'] == -1]
print(f"Аномалий найдено: {len(anomalies)}")
print(anomalies)
Применение: Обнаружение аномалий, outliers в данных.
8. PCA (Principal Component Analysis)
Для снижения размерности и визуализации.
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 2D визуализация
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.xlabel(f'PC1 ({pca.explained_variance_ratio_[0]:.2%})')
plt.ylabel(f'PC2 ({pca.explained_variance_ratio_[1]:.2%})')
plt.show()
# Объясненная дисперсия
cumsum = np.cumsum(pca.explained_variance_ratio_)
print(f"95% дисперсии в {np.argmax(cumsum >= 0.95) + 1} компонентах")
Применение: Визуализация высокомерных данных, снижение размерности для ускорения.
9. Временные ряды: ARIMA
Для прогноза временных рядов.
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
# Временной ряд: ежедневные продажи
sales = df['sales'].values
# ARIMA(p=1, d=1, q=1)
model = ARIMA(sales, order=(1, 1, 1))
result = model.fit()
# Прогноз на 30 дней вперед
forecast = result.get_forecast(steps=30)
forecast_df = forecast.conf_int()
forecast_values = forecast.predicted_mean
plt.plot(sales, label='Original')
plt.plot(forecast_values, label='Forecast', color='red')
plt.fill_between(range(len(sales), len(sales) + 30),
forecast_df.iloc[:, 0],
forecast_df.iloc[:, 1],
alpha=0.3)
plt.legend()
plt.show()
Применение: Прогноз продаж, трафика, бюджета.
10. Cross-validation
Для надежной оценки модели.
from sklearn.model_selection import cross_val_score, cross_validate
from sklearn.metrics import mean_squared_error, r2_score
# K-fold cross-validation
scores = cross_val_score(
model,
X, y,
cv=5, # 5-fold
scoring='r2'
)
print(f"CV scores: {scores}")
print(f"Mean: {scores.mean():.4f} +/- {scores.std():.4f}")
# Несколько метрик одновременно
scores = cross_validate(
model, X, y,
cv=5,
scoring=['r2', 'mse', 'mae']
)
for metric, values in scores.items():
print(f"{metric}: {values.mean():.4f} +/- {values.std():.4f}")
11. Гиперпараметры: GridSearchCV
Для подбора параметров модели.
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [5, 10, 15],
'min_samples_split': [2, 5, 10],
'learning_rate': [0.01, 0.1, 0.5]
}
gridsearch = GridSearchCV(
XGBClassifier(),
param_grid,
cv=5,
scoring='roc_auc',
n_jobs=-1
)
gridsearch.fit(X_train, y_train)
print(f"Best params: {gridsearch.best_params_}")
print(f"Best score: {gridsearch.best_score_:.4f}")
best_model = gridsearch.best_estimator_
12. Практический pipeline
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
pipeline = Pipeline([
('scaler', StandardScaler()),
('model', RandomForestClassifier(n_estimators=100))
])
# Обучение (scaler будет применен автоматически)
pipeline.fit(X_train, y_train)
# Предсказание (scaler будет применен к X_test)
y_pred = pipeline.predict(X_test)
# Для grid search
param_grid = {
'model__n_estimators': [50, 100],
'model__max_depth': [5, 10]
}
gridsearch = GridSearchCV(pipeline, param_grid, cv=5)
gridsearch.fit(X_train, y_train)
Метрики для оценки
from sklearn.metrics import (
accuracy_score, precision_score, recall_score, f1_score,
confusion_matrix, roc_auc_score, mean_squared_error,
mean_absolute_error, mean_absolute_percentage_error
)
# Классификация
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
auc = roc_auc_score(y_test, y_proba)
# Регрессия
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
mape = mean_absolute_percentage_error(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")
print(f"Precision: {precision:.4f}")
print(f"Recall: {recall:.4f}")
print(f"F1: {f1:.4f}")
print(f"AUC: {auc:.4f}")
Применение моделей в бизнесе
- Linear Regression — прогноз показателей (LTV, ARPU)
- Logistic Regression — вероятность конверсии, оттока
- Random Forest — важность признаков, скоринг
- XGBoost — сложные предсказания, конкурсы данных
- K-Means — сегментация клиентов (RFM анализ)
- DBSCAN — обнаружение аномалий
- ARIMA — прогнозирование продаж и трафика
Для Data Analyst достаточно знать теорию этих моделей и как их обучать. Deep learning (нейросети) — это уже специальность ML Engineer, не аналитика.