Чтобы обеспечить успех ваших инициатив в области науки о данных, необходимо с самого начала устранить разрыв между метрикой оценки вашей модели машинного обучения и бизнес-целью. В этой статье на примере демонстрируется влияние оценки модели машинного обучения и то, как она может способствовать вовлечению заинтересованных сторон.

Рассмотрим сценарий. Целью науки о данных является создание классификатора, который может точно прогнозировать сбои компонентов в бизнес-среде. Целевая переменная является двоичной, со значением 1, указывающим на сбои компонентов, и 0, указывающим на работающие компоненты.

Начните с определения ключевых заинтересованных сторон, на которых, скорее всего, повлияют результаты модели, которую вы пытаетесь построить. Работайте совместно, чтобы понять их потенциальный риск для различных типов ошибок неправильной классификации. Используйте эту информацию для построения метрики оценки, уравновешивающей компромисс между ошибками неправильной классификации и согласующейся с общими бизнес-целями организации.

В данном сценарии могут быть различные типы финансовых последствий в зависимости от прогнозов модели. Предположим, что соответствующие затраты составляют 40 000 долларов США на замену неисправного компонента, 15 000 долларов США на ремонт неисправного компонента и 5 000 долларов США на проведение проверки компонента.

Общие связанные с этим затраты на техническое обслуживание, основанные на прогнозах «вашей» модели, могут быть выражены следующим образом:

Total Maintenance Cost based on 'your' Model Prediction =

(Failures correctly predicted by your model)*$15,000 +
(Real failures that are not detected by your model)*$40,000 +
(Failures predicted by your model that are not real failures)*$5,000

Предположим, что существует совершенный классификатор, способный точно предсказывать все реальные отказы.

Minimum Cost associated with a Perfect Classifier = 
 
 (All real failures)*$15,000 = 

 (Failures correctly predicted by your model + 
  Real failures that are not detected by your model)*$15,000

Затем одна допустимая метрика оценки для бизнес-варианта может быть выражена, как показано ниже. Отношение может варьироваться от 0 до 1, и наша цель будет состоять в том, чтобы максимизировать показатель оценки при выборе оптимального классификатора.

Evaluation Metric for the Business Case:

 Minimum Cost associated with a Perfect Classifier ÷
 Total Maintenance Cost based on 'your' Model Prediction

Objective: maximise(evaluation metric)

Код для создания этой оценочной метрики приведен ниже:

from sklearn.metrics import confusion_matrix

def minimum_vs_model_cost(y_train, y_pred):    

    # y_train is the target value for the training set
    # y_pred is the predicted target value for the training set

    true_positives    = confusion_matrix(y_train, y_pred)[1, 1]
    false_positive    = confusion_matrix(y_train, y_pred)[0, 1]
    false_negatives   = confusion_matrix(y_train, y_pred)[1, 0]
 
    minimum_cost      = (true_positives + false_negatives)*15000
    model_cost        = (true_positives*15000  +
                         false_negatives*40000 +
                         false_positives*5000)

    evaluation_metric = minimum_cost/model_cost
    
    return evaluation_metric

from sklearn import metrics
scorer = metrics.make_scorer(minimum_vs_model_cost, greater_is_better=True)

Приведенный выше код говорит сам за себя, если вы знакомы с определением матрицы путаницы. Матрица путаницы – это двумерная таблица, в которой сравниваются реальные целевые метки и предсказанные целевые метки, обобщая эффективность классификатора.

Здесь,

  • Сбои, правильно предсказанные моделью = True Positives
  • Реальные сбои, не обнаруженные моделью = False Negative
  • Сбои, предсказанные моделью, которые не являются реальными сбоями = ложные срабатывания
  • Все реальные неудачи = (Истинно положительные + Ложноотрицательные)

Следующая диаграмма иллюстрирует производительность различных базовых классификаторов с использованием 5-кратной стратифицированной перекрестной проверки на обучающем наборе для пользовательской оценочной метрики «minimum_vs_model_cost». В сценарии рассматриваются базовые классификаторы: логистическая регрессия, дерево решений, случайный лес, бэггинг, адаптивное повышение, градиентное повышение и экстремальное градиентное повышение.

Ниже приведен фрагмент кода, который использовался для создания блочной диаграммы:

from sklearn.model_selection import StratifiedKFold, cross_val_score

models = []  # Empty list to store all the models

# Appending models into the list
models.append(("Logistic Regression", LogisticRegression(random_state=1)))
models.append(("dtree", DecisionTreeClassifier(random_state=1)))
models.append(("Random forest", RandomForestClassifier(random_state=1)))
models.append(("Bagging", BaggingClassifier(random_state=1)))
models.append(("Adaboost", AdaBoostClassifier(random_state=1)))
models.append(("GBM", GradientBoostingClassifier(random_state=1)))
models.append(("Xgboost", XGBClassifier(random_state=1)))

results = []  # Empty list to store all model's CV scores
names = []    # Empty list to store name of the models
score = []

# loop through all models to get the mean cross validated score
for name, model in models:
    kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=1)  # Setting number of splits equal to 5
    cv_result = cross_val_score(estimator=model, X=X_train, y=y_train, 
                                scoring=scorer, cv=kfold)
    results.append(cv_result)
    names.append(name)
    print("{}: {}".format(name, cv_result.mean()))

# Plotting boxplots for CV scores 
fig = plt.figure(figsize=(10, 4))
fig.suptitle("Algorithm Comparison")
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()

Классификатор XGBoost превосходит другие классификаторы с точки зрения показателей минимум_против_модели_стоимости и является многообещающим кандидатом для дальнейшей настройки гиперпараметров. Чтобы выполнить настройку гиперпараметров, вы можете использовать приведенный ниже фрагмент кода. Полный список параметров можно найти по этой ссылке.

# Example code to perform hyperparameter tuning

model = XGBClassifier(random_state=1)

param_grid = {"n_estimators": np.arange(150, 300, 50),
              "scale_pos_weight": [5, 10],
              "learning_rate": [0.1, 0.2],
              "gamma": [0, 3, 5],
              "subsample": [0.8, 0.9],} # initialise range for different hyperparameters

# define scorer
scorer = metrics.make_scorer(minimum_vs_model_cost, greater_is_better=True)

randomized_cv = RandomizedSearchCV(estimator=model,
                                   param_distributions=param_grid,
                                   n_iter=20, scoring=scorer, cv=5,
                                   random_state=1,n_jobs=-1,)

randomized_cv.fit(X_train, y_train)
print("Best parameters are {} with CV score={}:".format
        (randomized_cv.best_params_, randomized_cv.best_score_))

Если производительность набора данных тестирования для пользовательской оценочной метрики «minimum_vs_model_cost» с выбранным настроенным классификатором составляет, например, 0,8, то общие затраты на обслуживание, основанные на прогнозах модели, в 1,25 раза превышают минимальные затраты, связанные с идеальным классификатором. Это служит базой для связи производительности модели машинного обучения с бизнес-целью организации.

Возможность напрямую связать модели машинного обучения с бизнес-целями позволяет согласовать заинтересованные стороны, а проекты по науке о данных внести свой вклад в итоговую прибыль, продвигая бизнес вперед.

Спасибо, надеюсь, вам было интересно читать эту статью! Если вам понравилась статья, вы также можете ознакомиться с проектом здесь.