Хочу поделиться алгоритмом, который позволяет выявить ошибки при правке прогнозов модели машинного обучения. Конечно, в расчет берется ситуация, когда вы не можете просмотреть все записи ввиду их большого количества.
Для примера возьмем прогнозы потребности в товарах филиалов организации (pred) из предыдущей статьи и их скорректированные на величину резервов версии (pred_new). В данном случае из соображений наглядности наши векторы маленькие, но алгоритм подходит для массивов любой величины:
Для удобства сравнения я предварительно склеил два вектора прогнозов (функцией merge из библиотеки Pandas):
Затем осуществил следующую последовательность шагов:
1 Проверил, что новые предсказания не теряют значения (старые были, а новые не появились) и обратно (новые образованы, когда старых не было):
Следует отметить, что в зависимости от задачи данные ситуации не обязательно ошибочны. В указанном случае они, прежде всего, должны привлечь ваше внимание.
2 Исключил ситуацию одновременных null значений и удостоверился, что в части данных значения совпадают, а в части - нет:
3 Дальше разбираемся в причинах именно таких значений.
В данном случае значения должны были корректироваться при наличии резервов соответствующей позиции (хранятся в столбце stock_ser):
Склеиваем наш датафрейм с остатками для тех позиций, идентификаторы которых присутствуют в таблице прогнозов (остальные не нужны, так как не влияли на прогноз; по этой причине и используем левое объединение):
Убедимся, что изменения только в тех позициях, где есть остатки и их количество совпадает с численностью из вывода выше:
Дальше проверяем логику изменений:
где остатков больше чем прогноз, новый обнуляется (если данные большие, сравниваем таблицы по количеству записей):
где остатков меньше, новый прогноз равен разности:
Аналогичные стадии проверки осуществляются и в других ситуациях. Просто от случая к случаю логика может меняться, но в целом привлекать внимание должны присутствия где-то nan, равенства/неравенства значений.