"Приготвяме се да започнем"

Учене от грешки в машинното обучение

Как да намерим слабите места на регресионния модел

Когато анализираме ефективността на модела за машинно обучение, често се фокусираме върху един показател за качество. При проблеми с регресия това може да бъде MAE, MAPE, RMSE или каквото и да е най-подходящо за проблемния домейн.

Оптимизирането за един показател има абсолютно смисъл по време на тренировъчни експерименти. По този начин можем да сравним различни модели и да изберем най-добрия.

Но когато става въпрос за решаване на реален бизнес проблем и пускане на модела в производство, може да се наложи да знаем малко повече. Колко добре се представя моделът при различни потребителски групи? Какви видове грешки прави?

В тази публикация ще представя по-подробно подход за оценка на ефективността на регресионния модел.

Регресионни грешки: твърде много или твърде малко?

Когато прогнозираме непрекъсната променлива (като цена, търсене и т.н.), дефиницията на грешката от здравия разум е проста: искаме прогнозите на модела да бъдат възможно най-близо до действителните.

На практика може да ни интересува не само стойността на абсолютната грешка, но и други критерии. Например, колко добре улавяме тенденцията, дали има корелация между прогнозираната и действителната стойност — и какъв е знакът за нашата грешка в крайна сметка.

Подценяването и надценяването на целевата стойност може да има различни последици за бизнеса. Особено ако има някаква бизнес логика върху изхода на модела.

Представете си, че правите прогнозиране на търсенето за верига за хранителни стоки. Някои продукти са нетрайни и доставянето на твърде много въз основа на грешна прогноза би довело до загуба. Надценяването има ясна цена, която трябва да се вземе предвид.

В допълнение към класическия анализ на грешките, може да искаме да проследим това изкривяване на грешките(тенденцията към надценяване или подценяване) и как се променя с времето. Има смисъл както при анализиране на качеството на модела по време на валидиране, така и при производствен мониторинг.

За да обясним тази концепция за анализ на пристрастията към грешката, нека преминем през пример.

Оценка на производителността на модела

Да кажем, че имаме модел, който предвижда търсенето на градски велосипеди под наем. (Ако искате да си поиграете с този случай на употреба, този набор от данни за прогнозиране на търсенето на велосипед е свободно достъпен).

Ние обучихме модел, симулирахме разгръщането и сравнихме представянето му в „производство“ с това колко добре се представи на обучителния комплект.

На практика трябва да знаем основната истина за това. След като научим действителното търсене, можем да изчислим качеството на нашия модел и да преценим колко далеч сме в нашите прогнози.

Тук можем да видим голямо увеличение на грешката между референтната производителност в обучението и текущата производствена производителност.

За да разберем по-добре качеството, можем да разгледаме разпределението на грешките. Това потвърждава това, което вече знаем: грешката се е увеличила. Има и някои пристрастия към надценяване.

Нещата не изглеждат идеални и искаме да надникнем по-дълбоко в случващото се. Както и заинтересованите страни в нашия бизнес. Защо се случват тези грешки? Къде точно? Ще ни помогне ли преквалификацията да подобрим качеството? Трябва ли да проектираме нови функции или да създадем допълнителна последваща обработка?

Ето една идея как да го изследвате.

Гледайки ръбовете

Обобщените показатели за качество ни показват средното представяне. Това обаче са екстремните случаи, които често могат да ни дадат полезна информация. Нека погледнем директно там!

Можем да групираме предвижданията, където имаме големи грешки, и да научим нещо полезно от тях.

Как можем да приложим този подход?

Нека вземем всяка отделна прогноза и изчислим грешката. След това създаваме две групи въз основа на видовете грешки:

  • Надценяване. Случаи, при които моделът предвижда стойности, които са по-високи от действителните.
  • Подценяване. Случаи, при които моделът предвижда стойности, които са по-ниски от действителните.

Нека ограничим размера на всяка група, като изберем само 5% от най-екстремните примери с най-голяма грешка. По този начин имаме първите 5% от прогнозите, където моделът надценява, и първите 5%, където моделът подценява.

Останалите 90% от прогнозите са „мнозинството“. Грешката в тази група трябва да е близка до средната стойност.

Така можем да визуализираме предложените сегменти. Това е ситуация, която бихме искали да видим: повечето от прогнозите са близки до действителните стойности. Анализирането на отклонения може да донесе значима представа.

С какво може да бъде полезно?

Нека вземем пример за времеви серии. Ако изградихме страхотен модел и „научихме“ целия сигнал от данните, грешката трябва да е произволна. Не трябва да има шаблон. С изключение на няколко вероятни отклонения, грешката ще бъде близка до средната във всички групи. Понякога малко по-голям, понякога по-малък. Но средно приблизително същото.

Ако в данните има някакъв полезен сигнал, който може да обясни грешката, ситуацията може да изглежда различно. В конкретни групи може да има голяма грешка. Може също да има ясно изкривяване към под- или надценяване.

В тези случаи грешката може да зависи от стойности на конкретни функции. Какво ще стане, ако можем да намерим и опишем случаите, в които то е по-високо от обикновено? Точно това искаме да проучим!

Откриване на недостатъците

В нашия случай можем да видим, че грешката както в надценените, така и в подценените групи е значително по-висока от тази в групата на „мнозинството“.

След това можем да се опитаме да проучим и изследваме новите модели.

За да направим това, разглеждаме обектите в двете 5%-групи и виждаме кои стойности на характеристиките им съответстват. Функция по функция, ако можем.

Нашата цел е да установим дали има връзка между стойностите на специфичните характеристики и високата грешка. Tза да получим по-задълбочена представа, ние също правим разлика между надценяване и подценяване.

Представете си, че прогнозираме разходите за здравеопазване и постоянно надценяваме цената за пациенти от определени демографски групи? Или грешката е безпристрастна, но голяма и нашият модел се проваля в конкретен сегмент? Това е вид прозрение, което искаме да намерим.

Можем да създадем сложен (и тежък от изчислителна гледна точка) алгоритъм за извършване на това търсене на сегменти с недостатъчна ефективност. Като разумна замяна можем просто да направим този анализ функция по функция.

Как можем да го направим? Нека начертаем разпределенията на функциите и нашето целево търсене и цветно кодираме примерите, при които сме допуснали големи грешки.

В нашия случай на използване на прогнозиране на търсенето на велосипеди вече можем да получим някои прозрения. Ако начертаем функцията „влажност“, можем да забележим, че нашият модел сега значително надценява търсенето, когато стойностите на влажността са между 60 и 80 (нанесени вдясно).

Видяхме тези стойности в нашия набор от данни за обучение (начертан вляво), но грешката беше безпристрастна и сходна в целия диапазон.

Можем да забележим и други модели. Например в температурата. Моделът също надценява търсенето, когато температурата е над 30°C.

Вече можем да подозираме, че нещо се е случило с времето и се появиха нови свързани модели. В действителност ние обучихме модела, използвайки данните само от студените месеци от годината. Когато влезе в „производство“, лятото току-що започна. С новото време дойдоха нови сезонни модели, които моделът не успя да схване преди.

Добрата новина е, че като разгледаме тези графики, можем да видим, че изглежда има някакъв полезен сигнал в данните. Преобучението на нашия модел върху нови данни вероятно ще помогне.

Как да направя същото за моя модел?

Ние внедрихме този подход в библиотеката с отворен код Evidently. За да го използвате, трябва да подготвите вашите данни за моделно приложение като pandas DataFrame, включително характеристики на модела, прогнози и действителни (целеви) стойности.

Библиотеката ще работи с една или две DataFrame — ако искате да сравните ефективността на вашия модел в производството с вашите данни за обучение или друг минал период.

Докладът за ефективността на регресията ще генерира набор от диаграми за ефективността на модела и таблица за отклонение на грешката. Таблицата помага да се изследват връзките между стойностите на характеристиките и типа и размера на грешката.

Можете също така бързо да сортирате характеристиките, за да намерите тези, при които „екстремните“ групи изглеждат различно от „мнозинството“. Той помага да се идентифицират най-интересните сегменти, без ръчно да разглеждате всяка функция една по една.

Можете да прочетете пълните документи на Github.

Кога е полезно това?

Вярваме, че този вид анализ може да бъде полезен повече от веднъж в жизнения цикъл на вашия модел. Можете да го използвате:

  1. За анализ на резултатите от теста на модела. Например, след като потвърдите вашия модел офлайн тест или след A/B тест или внедряване в сянка.
  2. За извършване на текущ мониторинг на вашия модел в производството. Можете да правите това при всяко изпълнение на партиден модел или да го планирате като обичайна работа.
  3. За да вземете решение относно преквалификацията на модела. Разглеждайки отчета, можете да определите дали е време да актуализирате модела или преквалификацията би помогнала.
  4. За отстраняване на грешки в модели в производство. Ако качеството на модела се провали, можете да забележите сегментите, в които моделът се представя по-слабо, и да решите как да се справите с тях. Например, можете да предоставите повече данни за сегментите с ниска ефективност, да изградите отново своя модел или да добавите бизнес правила върху него.

Ако искате практически пример, ето „урок“ за отстраняване на грешки в производителността на модела за машинно обучение в производството: „Как да разбием модел за 20 дни“.