Очередное решение задачи с DataCamp
Задача:
Представим, что мы работаем аналитиком в инвестиционном фонде в Нью-Йорке. Наш финансовый директор хочет выяснить, стоит ли инвестировать часть активов фонда в биткоин. Мы должны подготовить отчет об этом активе и о том, как он соотносится с фондовым рынком в целом.
нам предоставили три файла.
1. данные по стоимости и объема продаж биткоина:
date -дата продажи
open - цена открытия
high - максимальная цена внутри дня
low - минимальная цена внутри дня
close - цена закрытия
volume - объем продаж
2. Аналогичные данные и по индексу SP500
Третий файл - это цена за золото и индекс инфляции в США. Данные представлены только по месяцам
Поставленная задача:
1. Как цена Биткоина коррелирует с индексом SP 500 и ценой на золото?
2. Проанализируйте доходность и профиль волатильности биткоина. Считаете ли вы, что это может помочь улучшить производительность портфеля? Верите ли вы, что биткоин можно использовать в качестве средства защиты от инфляции?
3. Финансовый директор стремится снизить волатильность в фонде. Изучите возможность создания портфеля с использованием некоторых или всех этих активов. Сделайте рекомендацию, которая минимизирует общий риск.
Для начала соединим наши данные в одну таблицу и переименуем переменные, что бы не запутаться.
Взглянем на цену открытия биткоина. Бокс-плот
Как видим из графика - цена открытия постоянно растет, поэтому было бы ошибкой заполнять пропуски средним значением или медианной. Поэтому заполнять пропуски будем предыдущим значением. Данный подход применим к каждой колонке с пропусками данных. Используем filna с методом ffill.
Отлично видно как очень много переменных коррелируют друг с другом. А переменная объема продажи sp500 вообще не оказывает влияние на целевую переменную. Отберем переменные предикторы и целевую переменные в отдельные серии.
columns_x=['volume_bitc', 'close_sp500', 'gold_usd', 'cpi_us']
columns_y=['close_bitc']
Для оценки будем использовать линейную регрессию. Так как у нас многомерное пространство то для оценки нашей модели будет использовать значение R2, а так же график распределения остатков.
Импортируем библиотеку регрессии, а так же библиотеку разбиения выборок.
Создадим регрессию, отберем выборки и обучим модель на тренировочных данных.
Предскажем целевую переменную на тесте и тренировочных данных
R^2 неплох, но вот квадрат ошибок уж очень велик. Неприлично много.
Необходимо взглянуть на график остатков. Если модель хорошо обучилась, то остатки (у(предсказанное) - у) должны распределиться равномерно возле 0.
Вариант на минималках не прокатил.
Данные разбиваются на две подвыборки. Значит модель не может предсказать данные коректно на всем диапазоне данных. Что то размазывает наши результаты.
Взглянем на наши переменные.
График смещен влево и не имеет нормального распределения. А это одно из главных ограничений линейной регрессии.
Но не стоит огорчаться, ведь есть он
Джон предложил преобразовывать переменные перед применением метода регрессии и доказал, что выход модели от этого не ухудшается, а даже наоборот становиться ближе к истине (уменьшается сумма квадратов ошибок)
Ну что ж проверим и прологарифмируем нашу переменную
уже лучше.
Все тоже самое проделываем и с остальными переменными.
Соберем новый ДатаФрейм, поделим его на выборки и обучим нашу модель на новых данных.
Вот теперь намного лучше. Квадрат ошибок маленький, а R^2 стал 0,962.
График остатков почти идеален. Хоть бери и вешай где нибудь в музее))
Так как мы прологарифмировали целевую переменную, то теперь изменение коэффициента Bi(в уравнении регрессии) следует считать в процентах. Т.Е. изменение Bi на 1 означает изменение X на один процент.
Итоговое уравнение регрессии:
y=-0.723722806346931+0.3663113336593727*volume_bitc_preob + +4.219420494615619*close_sp500_preob + -1.045320780195023*gold_usd_preob + -4.479857728200111*cpi_us_preob
Ответ на вопрос 1.
Из уравнения видно, что на цену Биткоина оказывает положительное влияние цена закрытия торгов индекса SP500. 4.2% роста. Объем продажи биткоина вызывает рост в 0,36%. А вот стоимость золота и инфляция снижает цену на 1 и 4,48% соответственно.
Небольшое предупреждение. Уравнение регрессии только показывает взаимосвязи переменных, но не объясняет причину данных связей. Поэтому не стоит забывать про ложную корреляцию. Все выводы сделаны только на тех данных, которые были предоставлены для анализа.
Теперь посмотрим на индексы волатильности активов.
Волатильность - это по сути стандартное отклонение цены актива умноженное на оцениваемый период.
Для начала необходимо определить насколько процентов изменяется цена актива в день. Для расчета будем брать изменение цены за последний год.
Изменение цены будем считать через логарифм. Формула в коде ниже
Теперь рассчитаем стандартное отклонение и умножим его на количество дней в году - это и будет нашей волатильностью!!!!
Ответ на вопросы 2 и 3
Волатильность биткоина в разы больше чем волатильность остальных активов. Стоимость биткоина слишком сильно реагирует на внешние факторы. Даже твит И.Маска вызывает рост на 10%. С другой стороны Биткоина уже сейчас не хватает на всех. Нельзя просто так выпустить в обращение еще 1000000 биткоинов. Для этого необходимо переписать всю цепочку хэшей. А для этого нет столько вычислительных мощностей. А значит биткоин будет продаваться все меньшими долями. А для этого снова нужны вычислительные мощности, а значит цена на биткоин с ростом спроса будет расти.
Поэтому наиболее безрисковая стратегия это выбор акций SP500 или прямая покупка индекса. Или вложение в золото.
Стратегия с высоким риском - это включение в портфель небольшого количества Биткоинов.