Задача 1:
Вам дали датасет с числом комнат, площадью и ценой на жильё. Постройте модель линейной регрессии. Как интерпретировать коэффициенты?
Возможно, стоит выполнить нормализацию признаков, так как число комнат и площадь могут отличаться на порядки.
Коэффициенты показывают, какой признак более значим при формировании цены.
Задача 2:
Вы обучили модель и получили высокое значение R^2, но при этом плохое качество на тесте. Что пошло не так?
Это похоже на переобучение, когда модель слишком сильно подстроилась под обучающие данные и не может точнее интерпретировать новые данные.
Вот на что стоит обратить внимание:
- Возможно, модель слишком сложна для данной задачи. Необходимо ее упростить, удалив избыточные признаки, снизив степень полиномиальных признаков или выбрав более простую модель.
- Проверить, была ли выполнена нормализация признаков.
- Проверить, применялась ли регуляризация при обучении модели.
- Проверить, является ли выборка данных достаточной по объему. Данных должно быть как можно больше, так как коэффициент детерминации в значительной степени зависит от их объема и дисперсии.
- Помнить, что коэффициент детерминации напрямую зависит от количества признаков. Некоторые из них могут быть незначимыми или сильно скоррелированными с другими. Необходимо найти и устранить эти признаки. Более точная метрика, учитывающая качество признаков, это Radj^2.
Задача 3:
Данные содержат один категориальный признак. Как его учесть в линейной регрессии?
Здесь ключевое слово – категориальный. Это не числовой признак. Его сначала необходимо перевести в числовой.
Стандартный способ кодирования категориальных признаков – One Hot Encoding, при котором каждый категориальный признак становится столбцом в данных со значением 1 или 0.

Как правило, при выполнении кодирования удаляют один из полученных столбцов для снижения вероятности переобучить модель.
Если вариантов категориального признака много, то One Hot Encoding приведет к значительному увеличению числа признаков. В этом случае лучше применить целевое кодирование – Target Encoding. Его суть – замена значения категориального признака средним значением его таргета.

Задача 4:
Построй модель с Lasso и Ridge. Как изменились веса? Что ты замечаешь?
Веса изменились в соответствии с важностью признаков.
Для модели Lasso (L1) некоторые веса обратились в 0. Модель их выключила.
Задача 5:
Построй полиномиальную регрессию. Как выбрать степень полинома?
Общий код может выглядеть так:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.linear_model import LinearRegression
model = make_pipeline(PolynomialFeatures(degree=3), StandardScaler(), LinearRegression())
Выбор степени полинома, как правило, делается путем подбора. Выполняется обучение моделей с разными степенями полинома (GreedSearch) и делается оценка потерь. Выбирается степень, дающая наименьшую ошибку.
Однако, если сама логика задачи диктует определенную степень (скажем, речь о площадях – тогда вторая степень оптимальна), это стоит учитывать.
Задача 6:
Вы обучили модель, а коэффициенты оказались нестабильными при малом изменении данных. Почему? Как решить проблему?
Основные причины нестабильности коэффициентов:
- мультиколлинеарность – признаки могут сильно коррелировать между собой, поэтому модель “затрудняется” определить, какой из них важнее. Необходимо найти и удалить (или преобразовать) лишние признаки. Можно также использовать PCA или другие методы понижения размерности.
- мало признаков – если количество наблюдений примерно равно числу признаков, значит, данных очень мало. Это называется плохой обусловленностью данных. Необходимо увеличить или сгенерировать дополнительные наблюдения.
- в данных есть нерелевантные признаки или признаки с высоким шумом. Модель начинает подстраиваться под шум. Необходимо удалить эти признаки или обработать для снижения шума.
- данные не нормализованы, имеют разный масштаб. Необходимо выполнить нормализацию данных перед подачей в модель.
- отсутствие регуляризации – в классической модели линейной регрессии не предусмотрена регуляризация. Необходимо добавить L1, L2 или ElasticNet регуляризацию.