Вопрос или проблема
Я пытался получить работающую модель LightGBM, которую я мог бы обучить на своих данных, выбрать наилучшую модель с наивысшим F1 показателем, а затем использовать ее для получения F1 показателя на тестовых данных. Однако все материалы, которые я нашел в интернете, выдают мне ошибки.
На данный момент я делаю следующее: после разделения данных и тестового набора (70:30) и подготовки cv-складок я готовлю рецепт, затем параметры настройки и т.д., в конечном итоге изучая модели для выбора параметров с использованием F1 показателей.
У меня есть данные, которые я хочу использовать для предсказания статуса неплатежеспособности по кредиту и того, будет ли кто-то неплатежеспособным, используя 21 предиктор в моем наборе данных с применением даунсемплинга.
Есть ли у кого-нибудь работающий скрипт или полезные ресурсы?
Заранее спасибо.
Я обнаружил, что обычно в Kaggle доступно много полных кодов решений для таких проблем. Вот несколько, которые я смог найти на основе быстрого поиска в Google:
- https://www.kaggle.com/code/duydnn/credit-default-predict-lightgbm-model-explain-r/notebook
- https://www.kaggle.com/code/psystat/titanic-lightgbm-modeling-with-r/report
- https://www.kaggle.com/code/andrewmvd/lightgbm-in-r/report
Надеюсь, это поможет.
Ответ или решение
Приготовление модели LightGBM для предсказания статусa дефолта по кредитам: Полное руководство
Если вы ищете рабочий сценарий для создания модели LightGBM, которая предсказывала бы статус дефолта по кредитным займам с учетом оценки F1, этот ответ предназначен именно для вас. Мы шаг за шагом рассмотрим процесс создания модели, от подготовки данных до выбора наилучшей модели.
Шаг 1: Подготовка данных
Первым делом вам нужно загрузить и подготовить ваши данные. Предположим, что ваши данные имеют 21 предиктор и целевую переменную loan_default
, которая принимает значение 0 (нет дефолта) или 1 (дефолт). Вы должны разделить набор данных на обучающую и тестовую выборки в пропорции 70:30.
import pandas as pd
from sklearn.model_selection import train_test_split
# Загрузка данных
data = pd.read_csv('your_data.csv')
# Разделение данных
X = data.drop('loan_default', axis=1)
y = data['loan_default']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)
Шаг 2: Предварительная обработка и балансировка
С учетом того, что вы говорили о «downsampling» для балансировки классов, мы можем использовать метод случайного подбора для уменьшения количества примеров в классе, где наблюдений больше.
from sklearn.utils import resample
# Объедините обучающие данные
train_data = pd.concat([X_train, y_train], axis=1)
# Разделение по классам
not_default = train_data[train_data.loan_default == 0]
default = train_data[train_data.loan_default == 1]
# Подборка
not_default_downsampled = resample(not_default,
replace=False, # без замены
n_samples=len(default), # равное количество примеров
random_state=42) # для воспроизводимости
# Объединение обратно
downsampled = pd.concat([not_default_downsampled, default])
# Обновление X_train и y_train
X_train = downsampled.drop('loan_default', axis=1)
y_train = downsampled['loan_default']
Шаг 3: Настройка параметров и кросс-валидация
Используя библиотеку lightgbm
, создадим и откалибруем модель с помощью сетки параметров, чтобы выбрать наилучший набор гиперпараметров.
import lightgbm as lgb
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import f1_score
# Определение модели и гиперпараметров
model = lgb.LGBMClassifier()
param_grid = {
'num_leaves': [31, 50],
'max_depth': [-1, 10],
'learning_rate': [0.05, 0.1],
'n_estimators': [20, 40]
}
# Кросс-валидация
grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring='f1', cv=5)
grid.fit(X_train, y_train)
# Лучшая модель
best_model = grid.best_estimator_
print(f"Лучшие параметры: {grid.best_params_}")
Шаг 4: Оценка на тестовых данных
Теперь, когда у вас есть лучшая модель, вы можете использовать ее для предсказания и оценки метрики F1 на тестовой выборке.
from sklearn.metrics import classification_report
# Прогнозирование на тестовых данных
y_pred = best_model.predict(X_test)
# Оценка
print(classification_report(y_test, y_pred))
Заключение
Следуя вышеизложенным шагам, вы сможете успешно построить и оценить модель LightGBM для предсказания риска кредитного дефолта. Не забывайте, что важно экспериментировать с гиперпараметрами и проводить кросс-валидацию, чтобы оптимизировать вашу модель. Используйте предоставленный код как основу и адаптируйте его под свои нужды.
Если у вас остались вопросы или возникли трудности, рассмотрите возможность взглянуть на аналогичные решения на Kaggle. также, например, это может быть отличным ресурсом.