В области информатики есть очень известная аббревиатура 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 количественно определяет серьезность мультиколлинеарности в обычном регрессионном анализе методом наименьших квадратов. Он предоставляет индекс, который измеряет, насколько увеличивается дисперсия (квадрат стандартного отклонения оценки) оценочного коэффициента регрессии из-за коллинеарности. Я рекомендую вам всем прочитать страницу Википедии о Факторе инфляции дисперсии, чтобы получить хорошее представление о ней.
В приведенном ниже коде мы вычисляем 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.
Я надеюсь, что при выборе правильных наборов независимых переменных для ваших моделей машинного обучения вам будет полезен подход, описанный в этой программе.
Если вам понравилась эта статья, то вам также может понравиться Машинное обучение и управление цепочками поставок: практическая серия.
Заявление об ограничении ответственности — эта статья написана только в образовательных целях. Не совершайте фактических покупок, продаж или финансовых операций на основе независимых переменных, указанных в этой статье.