Я прошел курс на Coursera под названием Python и статистика для финансового анализа. Я изучил множество важных методов анализа биржевых данных, включая линейную регрессию. Линейная регрессия — важная часть финансового анализа, и именно здесь пригодится знание Python.

Регрессионный анализ ищет взаимосвязи внутри переменных и является одной из наиболее важных областей в методах статистики и машинного обучения. Существует множество доступных методов регрессии, одним из которых является линейная регрессия.

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

Регрессионный анализ используется во многих различных областях, включая экономику, информатику, науку и финансы, и это лишь некоторые из них.

Линейная регрессия является одним из наиболее широко используемых методов регрессии, основным преимуществом которого является простота интерпретации результатов.

Уравнение линейной регрессии приведено ниже:

В этом посте я попытаюсь продемонстрировать простую модель линейной регрессии, которая содержит только одну независимую переменную X и одну зависимую переменную y.

Ниже приведена иллюстрация того, как работает модель линейной регрессии:

Я создал набор данных, который содержит только одну функцию для переменной X и одну функцию для переменной y. В оставшейся части этого поста я расскажу о сопроводительном коде Python, который я написал для регрессии данных.

Я написал программу в Google Colab, фантастическом бесплатном онлайн-блокноте Jupyter Notebook. Google Colab имеет много преимуществ, главное из которых — мобильность. Однако одним из недостатков этой платформы является тот факт, что она не имеет функции отмены. Поэтому необходимо соблюдать осторожность, чтобы не перезаписать или удалить какой-либо ценный код, потому что, если это произойдет, он будет потерян навсегда.

Как только я создал программу, я импортировал библиотеки, которые мне понадобятся для ее выполнения. Обычно я запускаю библиотеки только по мере необходимости, но в этом скрипте я импортировал pandas, numpy, statsmodels, sklearn, matplotlib и seaborn. Pandas используется для создания и поддержки наборов данных, numpy используется для создания массивов и выполнения алгебраических вычислений, statsmodels выполняет статистические операции, sklearn содержит множество функций машинного обучения, а matplotlib и seaborn графически отображают точки данных на графике:

После того, как библиотеки были импортированы, я создал набор регрессионных данных, в котором была только одна функция для зависимой переменной, X, и одна метка, являющаяся независимой переменной, y. В этом наборе данных я выбрал 6000 образцов, потому что хотел доказать гипотезу о том, что чем больше образцов взято, тем больше графическая цель напоминает распределение Гаусса или кривую нормального распределения:

Фрейм данных, созданный для этого упражнения, указан ниже:

Я использовал seaborn для анализа переменной y, и видно, что при 6000 выборках цель действительно напоминает кривую нормального распределения:

Я использовал библиотеку statsmodel для статистического анализа фрейма данных:

Независимость между образцами можно увидеть ниже. При проведении остаточного анализа чаще всего создается график «остатки против соответствия». Это точечная диаграмма остатков по оси y и подобранных значений (оценочных ответов) по оси x. График используется для обнаружения нелинейности, неравных отклонений ошибок и выбросов.

Затем я выполнил проверку нормальности, создав график Q-Q. График Q-Q представляет собой диаграмму рассеяния, созданную путем создания двух наборов квантилей друг против друга. Если оба набора квантилей исходят из одного и того же распределения, точки, образующие линию, будут рассматриваться как примерно прямые, что можно увидеть на иллюстрации ниже:

Затем я проверил равную дисперсию, создав график остатков и предикторов. График остатков — это график, который показывает остатки по вертикальной оси и независимую переменную по горизонтальной оси. Если точки на остаточном графике случайным образом разбросаны по горизонтальной оси, для данных подходит модель линейной регрессии; в противном случае более подходящей является нелинейная модель:

Затем я создал столбец ObservedError и нанес на график ошибки до 5000-й выборки. Наблюдаемая ошибка — это разница между измеренным значением величины и ее истинным значением:

Затем я построил график, чтобы сопоставить предположения (красным) с лучшим ответом (желтым) и нанесенными на график точками набора данных (синим):

Именно в этот момент я начал процесс подготовки данных для включения в модель линейной регрессии. Обычно я определял переменные X и Y, но в данном случае они были созданы в начале программы. Я бы также нормализовал или стандартизировал данные, но когда я проверил их на модели, это не повлияло на прогнозы.

Поэтому я использовал sklearn train_test_split, чтобы разделить переменные X и y на наборы для обучения и проверки:

Я определил модель и в этом случае использовал линейную регрессию sklearn. Я обучил и встроил тренировочный набор в модель и протестировал на проверочном наборе: -

Затем я оценил предсказание:

После того, как прогноз был сделан, я построил цель проверки по сравнению с прогнозами, и можно увидеть, что целевые значения очень похожи на фактические значения:

Я попытался добавить больше деталей в простую линейную регрессию, но, поскольку я все еще изучаю статистику, она все еще очень свежа для меня. Статистические данные, приведенные в этом посте, можно использовать для проведения финансового анализа, но мне нужно будет много практиковаться, прежде чем я достигну хоть какого-то уровня истинной уверенности в этом. Я надеюсь, что читатель извлек пользу из этого примера того, что можно сделать с простой моделью линейной регрессии.

Код для этого сообщения можно полностью найти в моей личной учетной записи GitHub, ссылка находится здесь: https://github.com/TracyRenee61/Coursera-Course/blob/main/Simple_Linear_Regression_using_statistics_pynb.ipynb