Линейна регресия с помощта на филтър на Калман

За тестване са взети историческите цени на затваряне на два ETF - австралийския EWA и канадския EWC от 2010 до 2014 г. Динамиката на цените на тези средства показва връзка, както е показано в диаграмата на разсейване в заглавието на публикацията. Същата графика обаче показва, че тази връзка не може да бъде описана с помощта на линейна регресия с постоянни коефициенти.
Нека първо дадем уравнението на линейната регресия:
където ak, bk са намалените цени съответно на фондовете EWC и EWA, а β, α са коефициентите на регресия - съответно наклона и пресечната точка. Нека пренапишем уравнението в матрична форма:
Филтърът на Калман е модел на пространството на състоянието, който се прилага рекурсивно върху шумен входен поток, за да се получи статистически оптимална оценка на състоянието на системата. Общата форма на филтъра на Калман съдържа уравнение за пренос и уравнение за наблюдение:
където xk, zk са векторът на скритите състояния и векторът на наблюденията в момент k, Ak, Hk са съответно матрицата на преходите и наблюденията, wk, vk са векторите на гаусовия шум с нулева средна стойност.
За нашите цели ще приемем, че векторът на състоянието xk съответства на вектора на регресионните коефициенти β. Да предположим също, че наклонът и пресичането следват процес на произволно ходене, тогава Ak ще бъде равно на матрицата за идентичност I (матрица, където главният диагонал е единици, останалите елементи са нули). В този случай уравнението на трансфера ще бъде написано:
т.е. β в следващия момент е равно на β в текущия момент плюс компонента на шума.
В следващата стъпка прилагаме нашия модел към уравнението за наблюдение на филтъра на Калман. За това намалените цени на затваряне на актива EWC ще бъдат обозначени като вектор на наблюдение zk, а матрицата на наблюдение Hk ще бъде представена катовектор 1x2, който съдържа цените на затваряне на EWA в първата колона и единици във втората колона, подобно на нашия Bk вектор. Така че това е просто линейна регресия между два актива. За подпрограмата на Python pykalman, която конструира филтъра на Калман, матрицата за наблюдение obs_mat изглежда така:
Последното нещо, което трябва да направите, е да определите компонентите на шума wk, vk. Задайте ковариацията на наблюдение vk като единичен вектор. След това ще третираме преходната ковариация, wk, като регулируем параметър за контролиране на скоростта на промяна на регресионните коефициенти:
След това инсталирайте филтърния клас Kalman KalmanFilter от модула pykalman:
и изчислете средните стойности и ковариацията на състоянията:
В резултат на това получаваме графики на промените в коефициентите на регресия - ъгъл на наклон (наклон) и пресичане (пресичане):

По-ясно можете да видите как коефициентите на регресия се коригират с времето в диаграмата на разсейване на активите EWA и EWC:

Мисля, че тези, които са практикували търговия с двойки, ще намерят тази статия за много полезна, тъй като разглежда един от основните въпроси при този тип търговия - как да изградите линейна регресия, без да попадате в обичайното съответствие на текущото състояние на ценовия спред.