На основе небольшого датасета о добыче газа на скважинах мы построим линейную регрессию с помощью метода наименьших квадратов.
Построить различные регрессионные модели ML, провести сравнительный анализ моделей и выбрать наилучшую для решения задачи прогноза выработки газа на основе характеристик скважины.
Таким образом, нам необходимо решить несколько основных задач:
- провести разведывательный анализ данных и определить наиболее значимые для моделирования факторы, от которых зависит добыча газа - наша целевая переменная, которую мы должны спрогнозировать с минимальной ошибкой;
- построить простейшую линейную регрессию по методу наименьших квадратов;
- построить полиномиальные регрессии с различными способами регуляризации;
- определить наилучшую модель из сравнительного анализа качества созданных моделей.
- Well — идентификатор скважины;
- Por — пористость скважины (%);
- Perm — проницаемость скважины;
- AI — акустический импеданс (
$кг/м^2 * 10^6$ ); - Brittle — коэффициент хрупкости скважины (%);
- TOC — общий органический углерод (%);
- VR — коэффициент отражения витринита (%);
- Prod — добыча газа в сутки (млн. кубических футов) - целевая переменная.
Все данные оказались числовыми, без пропусков и выбросов. Поэтому этап подготовки - очистки данных нам не понадобился.
Этап 1. Описательный, разведывательный анализы и построение простой линейной регрессии с помощью инструментов линейной алгебры из библиотеки numpy.
- Описательный и разведывательный анализ, включающий визуализацию признаков, а именно распределение каждого признака и зависимость от целевого. Мы помним, что наш датасет очень небольшой и наша цель в данном проекте - это рассмотрение способов построения линейных регрессий.
- Одним из важных условий для решения уравнения линейной регрессии является сама матрица наших данных и главная ее характеристика - вырожденность. Поэтому мы проведем анализ матрицы корреляций.
- Решение уравнения линейной регрессии и изучение полученных неизвестных коэффициентов уравнения.
- Анализ коэффициентов корреляций и коэффициентов регрессии помогут нам определить значимости факторов и исключить те из них, которые обладают коллинарностью/мультиколлинеарностью и искажают прогностическую способность модели, делают ее неустойчивой.
Этап 2. Создание линейных регрессий на полиномиальных признаках и с использованием различных методов регуляризации.
- Внедрение полинома 3-й степени для решения уравнения регрессии. Для обеспечения сходимости мы прежде стандартизируем наши признаки с помощью StandardScaler, так как наши данные более-менее нормального распределения.
- Полиномиальная регрессия с
$L_1$ -регуляризацией. - Полиномиальная регрессия с
$L_2$ -регуляризацией. - Полиномиальная регрессия с
$L_1$ и$L_2$ -регуляризациями (ElasticNet).
- Мы математическим способом показали, как находить плохо обусловленные данные, а именно с помощью построения матрицы корреляций, изучения ранга и определителя матрицы. При "плохих" данных мы можем получить непредсказуемые результаты, которые вообще не будут обладать хоть какой-то предсказательной способностью, поэтому важно изучать коэффициенты регрессии и выявлять "сбои" прежде, чем строить модель ML. А такие факторы необходимо исключить из данных для моделирования.
- Мы представили все варианты регрессий с различными уравнениями и для нашей задачи оптимальной оказалась полиномиальная регрессия с
$L_1$ -регуляризацией(Lasso), которая накладывает штраф на сумму модулей весов и "обнуляет" высококоллинеарные признаки, тем самым сохраняя линейную независимость между факторами.
ПРИМЕЧАНИЕ После каждого этапа проекта имеются подробные выводы.
А теперь переходим по ссылке и знакомимся с проектом здесь.
pandas
numpy
sklearn
matplotlib
seaborn
Проект создан на базе языка Python в Jupyter Notebook.
Автор: Ярослава Вобшаркян
(студент школы SkillFactory по курсу Data Science)