среда, 19 декабря 2018 г.

40 вопросов джуниору от analyticsvidhya.com, часть 1




Есть хороший индийский сайт analyticsvidhya про машинное обучение. Там 2 года назад вышел материал „40 вопросов на собеседовании по ML“. Ничего сенсационного в нём нет, но разных гайдов типа „как пройти собеседование джуниору“ довольно много, а вот того же самого по ML ни разу не видел.
Короче говоря, сделал перевод этого текста.
При переводе иногда только немного правил Гугл-переводчик, который мощно прогрессирует. Избыточные фразы сокращал. Аббревиатуры раскрывал и переводил. Ничего не исправлял, но несколько раз добавлял немного текста. Если не был уверен в переводе термина, то в скобках оставлял оригинальный.
Буду выкладывать по 10 вопросов.
Если заметите неточности, буду рад получить обратную связь. При использовании просьба давать ссылку на источник.



Вопросы 1-10



1. У вас набор данных из 1000 столбцов и 1 млн строк. Есть ограничение вычислительных мощностей, поэтому надо сократить размерность данных и, соответственно, время вычисления. Что вы будете делать?

  • Закрыть все программы, включая браузер, чтобы высвободить максимум оперативной памяти.
  • Можно взять только часть данных, например 300 тыс. строк, и произвести все вычисления только на ней.
  • Можем разбить все признаки на категориальные и численные, и удалить коррелированные переменные. Для численных переменных переменных используем корреляцию. Для категориальных переменных используем критерий хи-квадрат.
  • Можно использовать PCA и выбирать компоненты, которые могут объяснить максимальную дисперсию в наших данных.
  • Библиотека Vowpal Wabbit.
  • Линейная модель с использованием SGD (стохастический градиентный спуск).
  • Надо применить понимание бизнеса (природы данных), и попробовать интуитивно избавиться от лишних признаков. Но это довольно опасный подход.
Примечание: если ещё не были знакомы, то обязательно посмотрите PCA и Vowpal Wabbit — это продвинутые методы.



2. Обязательно ли вращение матрицы в PCA? Если да, то почему? Что будет если вы не повернёте (матрицу)?

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



3. В наборе данных отсутствуют значения, лежащие внутри одного среднего квадратичного отклонения от медианы. Какой процент данных остаётся? 

Данные распределены по медиане => предположим, что это нормальное распределение. Мы знаем, что при нормальном распределении ~ 68% данных находятся внутри одного среднего  отклонения от медианы. Тогда ~ 32% данных останутся и будут доступные для обработки. 


4. У вас набор данных по обнаружению рака. Ваша модель классификации достигла accuracy 96%. Почему такая точность не повод для радости? Что можно с этим сделать?

Если вы работали с достаточным количеством наборов данных, то должны были понять, что обнаружение рака определяется по несбалансированным данным. В таком наборе accuracy не подходит на роль метрики. Нас интересует миноритарный класс (4%). Следовательно, чтобы оценить производительность модели, мы должны использовать другие метрики: Sensitivity (True Positive Rate), Specificity (True Negative Rate), F-меру (гармоническое среднее). Если и эти показатели окажутся неэффективными, то мы можем:
  • Для попытки сбалансировать данные использовать одну из технологий: undersampling (урезание мажоритарного класса); oversampling (дополнение миноритарных классов); SMOTE (генерятся объекты, похожие на образцы миноритарных классов, но не дублирующие их).
  • Изменить пороговое значение прогнозирования, выполнив калибровку вероятности и найдя оптимальный порог, используя метрику AUC-ROC.
  • Присваивать веса таким образом, чтобы классы меньшинства получали больший вес.
  • Использовать обнаружение аномалий.


5. Почему алгоритм „наивный Байес“ так называется?
Этот алгоритм предполагает, что все признаки в данных одинаково важны и статистически независимы. Но, как мы знаем, почти всегда это не так.


6. Объясните априорную вероятность (prior probability), вероятность (likelihood) и предельную вероятность (marginal likelihood ) в контексте алгоритма „наивный Байес“?
  • Априорная вероятность - это доля зависимой (двоичной) переменной в наборе данных. Это самое точное предположение, которое вы можете сделать о классе без какой-либо дополнительной информации. Например: в наборе данных целевая переменная является бинарной. Доля 1 = 70%, доля 0 = 30%. Следовательно, мы можем сделать вывод, что с вероятностью 70% любой новый объект будет = 1.
  • Вероятность (likelihood) - вероятность классификации данного наблюдения как =1 в присутствии какой-либо другой переменной. Например, вероятность того, что слово «FREE» используется в спам-сообщении, является вероятностью.
  • Предельная вероятность (marginal likelihood) - вероятность использования слова «FREE» в любом сообщении.


7. Вы работаете с временными рядами. Надо сделать модель с высокой accuracy. Вы начинаете с алгоритма дерева решений, т. к. точно знаете, что он хорошо работает с данными всех видов. Но затем вы берёте регрессионную модель и получаете accuracy выше. Почему так получилось? 

Временные ряды имеют свойство линейности. Но дерево решений работает для нелинейных зависимостей лучше других моделей. Так что всё очевидно — регрессионная модель даст устойчивый прогноз, если точно известно что эти данные линейно зависимы.



8. Вы присоединились к новому проекту по доставке еды, где компания пытается сэкономить денег. Проблема в том, что служба доставки всё время опаздывает, клиенты остаются недовольны. Чтобы удержать клиентов, доставку сделали вообще бесплатной. Какие алгоритмы могут помочь?

Не надо перебирать в уме все известные вам алгоритмы. Это задача не машинного обучения, а оптимизации маршрута курьеров.


9. У модели низкое смещение и высокий разброс (дисперсия). Какой алгоритм следует тут использовать?

Низкое смещение возникает, когда прогнозируемые значения близки к фактическим значениям. Другими словами, модель становится достаточно гибкой, чтобы имитировать распределение train. Звучит как большое достижение, но гибкая модель не умеет обобщать. Т.е. при применении на test результат будет слабым.
Тогда можно использовать алгоритмы беггинга, например случайный лес, для решения проблемы высокой дисперсии. Такие алгоритмы делят генеральную выборку на случайно подобранные подмножества. Затем эти семплы генерят набор моделей по одному алгоритму. Позже, прогнозы модели объединяются с использованием голосования (классификация) или усреднения (регрессия).
Кроме того, для борьбы с высокой дисперсией мы можем:
  • Использовать метод регуляризации, при котором более высокие коэффициенты модели штрафуются, что снижает сложность модели.
  • Со всеми переменными в наборе данных, алгоритм может испытывать трудности. Используйте параметр feature_importances (или coef_), оставьте только лучшие n признаков.


10. В вашем наборе данных многие признаки сильно коррелируют. Перед применением PCA надо ли сначала удалить коррелированные признаки?

Отказ от коррелированных признаков оказывает существенное влияние на PCA, потому что в противном случае дисперсия, объясняемая конкретным компонентом, становится раздутой.
Например: в ваших данных 3 признака, из них 2 коррелированны. Если вы запустите PCA с этими данными, то первый основной компонент покажет двойную дисперсию, чем с некоррелированными переменными.. Кроме того, добавление коррелированных переменных позволяет PCA придавать большее значение этим переменным, что вводит в заблуждение.
Короче говоря, надо удалять.


Комментариев нет:

Отправить комментарий