Вот в чем дело - как трейдер, работающий на колебаниях / дневных / опционах, я хочу знать, есть ли вероятность того, что может случиться большое падение. Под «большим падением» я подразумеваю, что процентное изменение цены закрытия нормализуется (z-оценка), а затем определяется «большое» падение как нечто большее, чем 4 стандартных отклонения под средним. В зависимости от того, какие данные вы используете, это падение составит ~ 5,4% по сравнению с предыдущим днем. Я хотел создать модель, которая была бы универсальной, стремящейся к универсальности, поэтому вместо того, чтобы сосредоточиться на одной акции, я использовал данные многих основных индексов США и всего мира, а также многих широких ETF из Vanguard, iShares и т. д., которые охватывают широкий спектр международных рынков, включая страны Северной Америки, Европы и Азии, общие средства отслеживания индексов, такие как S & P500, Russell 2000, и некоторые отраслевые ( например, здравоохранение, информационные технологии) ETF. Для архитектуры модели я попытался использовать некоторые базовые сети LSTM, но в конце концов обнаружил, что использование Light GBM (машины для повышения градиента) ускоряет обучение и анализ. .

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

Поскольку вы имеете дело с суперсбалансированными наборами на уровне отношения большинства / меньшинства ~ 300, я попытался использовать модуль передискретизации библиотеки imblearn, чтобы создать сбалансированный набор данных с использованием базового SMOTE .

Затем я использовал поиск по рандомизированной сетке для настройки гиперпараметров. Баллы Меня больше всего интересовали точность и запоминание ИСТИННОГО класса, которые можно суммировать с помощью F1-балла для ИСТИННОГО класса. Мы хотим поймать как можно больше реальных падений, не создавая слишком много ложных срабатываний!

Затем я использовал функцию sklearn CalibratedClassifier для калибровки классификатора. Обычно это улучшает модель - хотя это зависит от тестовых данных, но также и от порога и точки на кривой отзыва, которые вас интересуют. Для этого эксперимента я решил использовать 0,80 в качестве моей минимально приемлемой ИСТИННОЙ оценки запоминаемости класса. Мне нужно было поймать 80% реальных падений - и сейчас я хочу знать, какая версия классификатора имеет больше ложных срабатываний, чем другая. Я также провел небольшое тестирование при отзыве 0,90. Я обнаружил, что на этом уровне различия менее заметны.

ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ

Тестируя с помощью IOO, я сравнил откалиброванный и некалиброванный классификаторы на этом ETF на уровне 0,8 ИСТИННЫЙ уровень отзыва класса. Вы можете видеть, что на этом уровне откалиброванный классификатор - тот, что находится наверху - имеет 16 ложных срабатываний против 26 некалиброванных классификаторов.

И вот что происходит, когда вы требуете, чтобы минимальный отзыв для класса ИСТИНА составлял 0,9:

Не проводя точного или исчерпывающего поиска идеального порога, я обнаружил, что 0,7 дает максимальный показатель f1 0,87 с откалиброванным классификатором - и это лучшее, что я могу сделать для БВК.

Конечно, дьявол кроется в деталях, какая ошибка стоит вам больше денег. Если вы покупай и держи, то, вероятно, не стоит так сильно заботиться о 5% -ном падении, которое происходит менее чем в 1% случаев. Но если вы торгуете на дневной основе некоторыми ETF S & P500 с кредитным плечом или чем-то подобным, вам может быть интересно узнать, следует ли вам взять свою прибыль и прекратить торги.

Чистый код есть у меня на GitHub, или вы можете увидеть больше записной книжки здесь.