Примечание редакторам Data Science. Хотя мы разрешаем независимым авторам публиковать статьи в соответствии с нашими правилами и рекомендациями, мы не поддерживаем вклад каждого автора. Не следует полагаться на работы автора без консультации с профессионалами. См. Подробности в наших Условиях для читателей.
Вероятностное машинное обучение идет рука об руку с торговлей акциями: вероятностное машинное обучение использует прошлые экземпляры для прогнозирования вероятностей определенных событий, происходящих в будущих экземплярах. Это можно напрямую применить к торговле акциями, чтобы предсказать будущие цены на акции.
Концепция:
Эта программа будет использовать гауссовский наивный байесовский метод для классификации данных по возрастающей или уменьшающейся цене акций.
Из-за волатильности акций я не буду использовать цену закрытия акции для ее прогнозирования, а буду использовать соотношение между прошлой и текущей ценой закрытия. Чтобы понять, как работает программа, мы должны сначала понять действующий алгоритм:
Что такое гауссовский наивный байесовский классификатор?
Gaussian Naive Bayes - это алгоритм, который классифицирует данные путем экстраполяции данных с использованием распределения по Гауссу (идентично нормальному распределению), а также теоремы Байеса.
Преимущества:
- Работает с небольшими наборами данных
В отличие от традиционных нейронных сетей, в которых каждый нейрон был напрямую связан с каждым другим нейроном, вероятности считаются независимыми.
- Не требует интенсивных вычислений
Поскольку наивный байесовский классификатор является детерминированным, параметры наивного байесовского классификатора не меняются на каждой итерации, в отличие от весов, которые используются в нейронной сети. Это делает алгоритм намного менее требовательным к вычислениям.
Недостатки:
- Не удается изучить большие данные
Сложное отображение нейронной сети превосходит простую архитектуру наивного байесовского алгоритма, когда данных достаточно для оптимизации всех параметров.
Код:
Разобравшись с принципами работы гауссовского наивного байесовского алгоритма, перейдем к программе:
Шаг 1 | Предпосылки:
import yfinance from scipy import stats aapl = yfinance.download('AAPL','2016-1-1','2020-1-1')
Это две библиотеки, которые я буду использовать в своем проекте: yfinance - для загрузки биржевых данных, а scipy - для создания гауссовских дистрибутивов.
Я скачал данные об акциях Apple с 2016 по 2020 год, чтобы получить воспроизводимые результаты.
Шаг 2 | Преобразование в гауссовские распределения:
def calculate_prereq(values): std = np.std(values) mean = np.mean(values) return std,mean def calculate_distribution(mean,std): norm = stats.norm(mean, std) return norm def extrapolate(norm,x): return norm.pdf(x) def values_to_norm(dicts): for dictionary in dicts: for term in dictionary: std,mean = calculate_prereq(dictionary[term]) norm = calculate_distribution(mean,std) dictionary[term] = norm return dicts
Функция «calculate_prereq» помогает вычислить стандартное отклонение и среднее значение: две вещи, необходимые для создания гауссовского распределения.
Я бы сделал функцию для создания гауссовского распределения с нуля, но функции scipy были сильно оптимизированы и поэтому будут лучше работать с наборами данных с большим количеством функций.
Гауссовские распределения являются приближением общих вероятностных данных. Возьмем, к примеру, тестовый спектр IQ. У большинства людей средний показатель IQ составляет 100. Следовательно, пик распределения Гаусса будет на уровне 100. На обоих концах спектра количество людей, получающих чрезвычайно низкие и чрезвычайно высокие баллы, уменьшается по мере того, как баллы становятся более экстремальными. С помощью распределения Гаусса можно экстраполировать вероятность того, что человек получит определенное значение, и, следовательно, получить представление о нем.
Шаг 3 | Сравните возможности:
def compare_possibilities(dicts,x): probabilities = [] for dictionary in dicts: dict_probs = [] for i in range(len(x)): value = x[i] dict_probs.append(extrapolate(dictionary[i],value)) probabilities.append(np.prod(dict_probs)) return probabilities.index(max(probabilities))
Эта функция просто просматривает словари (разные классы) и вычисляет вероятность повышения или понижения цены с учетом соотношений между ценами за последние десять дней. Затем он возвращает индекс в списке словарей, класс, который классификатор Байеса вычисляет как имеющий наивысшую вероятность.
Шаг 4 | Запустите программу:
drop = {} increase = {} for day in range(10,len(aapl)-1): previous_close = aapl['Close'][day-10:day] ratios = [] for i in range(1,len(previous_close)): ratios.append(previous_close[i]/previous_close[i-1]) if aapl['Close'][day+1] > aapl['Close'][day]: for i in range(len(ratios)): if i in increase: increase[i] += (ratios[i],) else: increase[i] = () elif aapl['Close'][day+1] < aapl['Close'][day]: for i in range(len(ratios)): if i in drop: drop[i] += (ratios[i],) else: drop[i] = () new_close = aapl['Close'][-11:-1] ratios = [] for i in range(1,len(new_close)): ratios.append(new_close[i]/new_close[i-1]) for i in range(len(ratios)): if i in increase: increase[i] += (ratios[i],) else: increase[i] = () X = ratios print(X) dicts = [increase,drop] dicts = values_to_norm(dicts) compare_possibilities(dicts,X)
Эта последняя часть объединяет все функции и собирает 9 коэффициентов для курса акций за последние 10 дней. Затем он выполняет программу и возвращается, если цена вырастет или упадет. Возвращаемое значение - это индекс словаря в списке dicts. Если он равен 1, прогнозируется снижение цены. Если он равен 0, прогнозируется рост цены.
Заключение:
Эта программа представляет собой всего лишь базовую структуру гауссовского наивного байесовского алгоритма. Вот несколько способов улучшить мою программу:
- Увеличьте количество функций
Вы можете включить такие функции, как объем и цена открытия, чтобы увеличить объем данных. Однако перегрузка данных может привести к тому, что гауссовский наивный байесовский алгоритм будет менее эффективным, поскольку он плохо работает с большими данными.
- Ссылка на Alpaca API
API альпаки - отличная платформа для тестирования торговых стратегий. Попробуйте связать эту программу, чтобы совершать сделки на покупку или продажу на основе прогнозов модели!
Мои ссылки:
Если вы хотите увидеть больше моего контента, нажмите эту ссылку.