Как определить правильные независимые переменные для контролируемых алгоритмов машинного обучения?

В области информатики есть очень известная аббревиатура GIGO, которую я выучил еще в школьные годы. GIGO означает «мусор на входе и мусор на выходе». По сути, это означает, что если мы скармливаем неподходящие и ненужные данные компьютерным программам и алгоритмам, это приведет к нежелательным и неверным результатам.

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

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

Цель

Мы хотим построить модель для прогнозирования курса акций компании ASML. Мы загрузили данные о ценах на акции некоторых клиентов, конкурентов и индексных точек ASML за последние 20 лет. Мы не уверены, какие из этих точек данных следует включить для построения модели прогнозирования акций ASML.

Образец файла данных

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

"""Filename - GetStockData.py is a function to download the stock from 1st Jan 2000 until current date"""
import datetime as dt
import pandas as pd
import pandas_datareader.data as web
import numpy as np
def stockdata(ticker):
    start= dt.datetime(2000,1,1)    ## Start Date Range
    end=dt.datetime.now()    ## Curret date as end date Range
    Stock=web.DataReader(ticker, "yahoo", start, end)
    
    name=str(ticker) + ".xlsx"
    Stock.to_excel(name)
    return ()

Функция stockdata () вызывается из другой программы с тикерами для загрузки данных.

""" Filename - stockdownload.py"""
import GetStockData
ticker= ["MU", "ASML","TSM","QCOM", "UMC", "^SOX", "INTC","^IXIC"]
for i in ticker:
    GetStockData.stockdata(i)

Обратите внимание, что файл Python GetStockData и файлы stockdownload.py помещаются в один и тот же файловый каталог для успешного импорта файла.

См. также:  Как обнаружить циклы на графике

Шаг 1- Первый шаг — продумать все переменные, которые могут влиять на зависимые переменные. На этом этапе я предлагаю не ограничивать свое мышление и сбрасывать в мозг все переменные.

Шаг 2-. Следующим шагом является сбор / загрузка точек данных предполагаемых независимых переменных для анализа.

Я отформатировал и сопоставил загруженные данные в один файл Excel «StockData.xlsx»

Шаг 3-. Мы импортируем пакеты pandas, matplotlib, seaborn и statsmodels, которые мы собираемся использовать для нашего анализа.

import pandas as  pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor

Шаг 4. Считайте полный файл Excel с образцами данных в PandasDataframe под названием «данные». Далее заменим индекс на столбец даты

data=pd.read_excel("StockData.xlsx")
data.set_index("Date", inplace= True)

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

Шаг 5- Одно из лучших мест, с которого можно начать понимать взаимосвязь между независимыми переменными, — это корреляция между переменными. В приведенном ниже коде тепловая карта корреляции построена с использованием метода .corr в Pandas.

sns.heatmap(data.corr(), annot=True, cmap="YlGnBu")
plt.show()

Тепловая карта корреляции, показанная ниже, дает нам визуальное представление о взаимосвязи между переменными. Теперь нам не нужен набор независимых переменных, которые имеют более или менее похожие отношения с зависимыми переменными. Например, индекс TSM и Nasdaq имеет коэффициент корреляции 0,99 и 0,97 с ASML соответственно. Включение TSM и NASDAQ не может улучшить точность прогнозов, поскольку они имеют аналогичную взаимосвязь с зависимой переменной, ценой акций ASML.

Шаг 6- Прежде чем мы начнем отбрасывать избыточные независимые переменные, давайте проверим коэффициент увеличения дисперсии (VIF). среди независимых переменных. VIF количественно определяет серьезность мультиколлинеарности в обычном регрессионном анализе методом наименьших квадратов. Он предоставляет индекс, который измеряет, насколько увеличивается дисперсия (квадрат стандартного отклонения оценки) оценочного коэффициента регрессии из-за коллинеарности. Я рекомендую вам всем прочитать страницу Википедии о Факторе инфляции дисперсии, чтобы получить хорошее представление о ней.

См. также:  Глубокая копия JavaScript для массива и объекта

В приведенном ниже коде мы вычисляем VIF каждой независимой переменной и распечатываем его. Мы создадим новый DataFrame без исторических цен на акции ASML, поскольку наша цель — определить VIF среди потенциальных независимых переменных.

X=data.drop(["ASML"], axis=1)
vif = pd.DataFrame()
vif["features"] = X.columns
vif["vif_Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif)

В общем, мы должны стремиться к тому, чтобы VIF для независимых переменных составлял менее 10. Ранее мы видели из тепловой карты, что TSM и NASDAQ имеют аналогичный коэффициент корреляции с ASML, и то же самое также отражается с высоким показателем VIF.

Основываясь на нашем понимании из тепловой карты и результата VIF, позвольте нам отказаться от NASDAQ (как наивысшего VIF) в качестве потенциального кандидата на роль независимой переменной для нашей модели и повторно оценить VIF.

X=data.drop(["ASML","NASDAQ"], axis=1)
vif = pd.DataFrame()
vif["features"] = X.columns
vif["vif_Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif)

Мы видим, что после удаления NASDAQ VIF нескольких других потенциально независимых компаний также уменьшился.

Выбор правильной комбинации независимых переменных требует небольшого опыта наряду с проверкой VIF методом проб и ошибок с различными перестановками. TSMC является ведущим производителем полупроводников в мире и как заказчик ASML оказывает сильное влияние на бизнес ASML. Принимая во внимание этот аспект, я отброшу «INTC» и «PHLX» и повторно оценим VIF для остальных переменных.

Как мы видим, после двух итераций у нас VIF всех оставшихся переменных меньше 10. Мы удалили переменные с мультиколлинеарностью и определили список независимых переменных, которые имеют отношение к прогнозированию цен на акции ASML.

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

Если вам понравилась эта статья, то вам также может понравиться Машинное обучение и управление цепочками поставок: практическая серия.

См. также:  Коротко о WebAssembly

Заявление об ограничении ответственности — эта статья написана только в образовательных целях. Не совершайте фактических покупок, продаж или финансовых операций на основе независимых переменных, указанных в этой статье.

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: