Pull to refresh

Comments 21

Можете посоветовать, что почитать на тему прогнозирования временных рядов?
Я планирую написать следующую статью по основам анализа временных рядов на python+statsmodels. При ее написании буду использовать лекции по Анализу временных рядов ВШЭ, ссылку на них приложу в статье. Планирую выложить статью в конце этой недели.
Это работает только с числами?
Как поступить если во входных данных есть категорийный столбец(например цвет)?
вы интересуетесь как это вообще сделать, или именно в Питоне? Если в целом, то этому посвящен раздел эконометрики «Limited and Categorical Predictor Variables». Чаще всего, категорийные переменные кодируются как {0;1} дамми-переменные, например переменная female={0 если мужчина; 0; если ребенок; 1 — если женщина}, и так для всех переменных — мужчина, женщина, ребенок.
Можно использовать Multiple Categorical кодирование (1-красный, 2-синий, и тп). Еще как вариант, можно закодировать относительную частоту вхождения категорий в выборку.
Только и оценивать модель уже надо будет другими способами.
Интересует общий подход. До {0;1} я дошел, но иногда бывают столбцы с 100 000 вариантов состояний. Нормально ли там будет работать Multiple Categorical?

И еще есть вопрос: есть набор полей допустим
возраст|пол{0;1}|рост || итог{0;1}
25|0|187|0
26|0|192|1

Нужно по входным данным определять выходное значение.

Проблема в том что есть множество строк с одинаковыми значениями полей. ( Ну т.е в магазин 100 раз зашел один человек и 1 раз совершил покупку). Хотелось бы чтобы модель в таком случае выдавала 0.01 а не 0.
Но множество строк по одному набору тоже есть не всегда(т.е допустим человек зашел в магазин 1 раз и сразу совершил покупку, не факт что в следующий раз он тоже совершит, хотелось бы как-то брать агрегированную информацию с заходов похожих людей).
Не подскажете есть какие-то статьи на эту тему, или ключевые слова для поиска?

По первому вопросу, честно, не знаю. Надо порыться в литературе, больше 4-5 категорий я не встречал в приложениях. Как вариант — если у вас n категорий, создаете n-1 дамми (0;1) и их используете в регрессии.
Насчет второго вопроса я не совсем уверен что понял что именно вы спрашиваете.
Насколько я понимаю, у вас бинарный результат (купил / не купил) и разношерстные вводные данные. В таком случае — Limited dependent variable модели. Классические варианты — логит или пробит.
Можно его закодировать через hotonecoder или label encoder про данные функции я писал в предыдущих своих статьях, например здесь
У меня тут несколько замечаний по статье.
1.Теперь давайте посмотрим не связаны ли между собой какие-либо атрибуты. Сделать это можно рассчитав коэффициенты корреляции для всех столбцов.
Смотреть на корреляцию каждый раз можно, но толку от этого практически ноль. Как говорили древние – «Correlation does not imply causation». Помните картинку с сомалийскими пиратами и температурой на планете? Так вот, там практически стопроцентная корелляция. Но если так уж хочется корелляцию посмотреть, то возьмите тогда уж Granger causality test, там хоть используются предыдущие лаги чтобы определить, влияет ли Х на У и наоборот. Да и F-тест поавторитетнее обычного коэффициента корелляции будет.

2. Как можно заметить и матрицы с коэффициентами корреляции на y1,y2 больше значения оказывают X2 и X5, нежели X1 и X4, таким образом мы можем последние столбцы мы можем удалить.
Facepalm. Как вы можете так просто удалять данные только потому что у них коэффициент кореляции низкий? Если Х1 влияет на У в два раза слабее чем Х2, это не повод выбрасывать Х1, он все равно значимый. Для определения этого и существует t-test, и основанная на нем p-value для тестирования нулевой гипотезы, что переменная Х1 не является значимой. Только прогнав регрессию, вы сможете выбрасывать переменные. Кстати, насчет выбрасывания данных я еще в прошлый раз хотел вам на это указать, когда вы сказали что «Это связано с тем, что у одно заемщика быть несколько кредитов и по каждому из них в разных бюро моте быть разная информация» и сделали .drop_duplicates для заемщиков, оставив 50000 записей из 280942 и удалив таким образом 80% информации.

3. Если уж заниматься первичной обработкой данных, вам следовало обратить внимание, что они очень отличаются по величине. Так, у Х1 все значения меньше единицы, а Х2 больше 500. Хорошо бы было привести их к более-менее одинаковой шкале, трансформировав через логарифм. Во-вторых, если вы посмотрите на гистограммы переменных, то они очень далеки от нормальных, что является еще одним поводом сделать логарифмическую трансформацию. И запускать регрессию не на абсолютных значениях, а в логарифмически масштабированной шкале – log(Х1), log (X2), так званая log-log или log-linear регрессия. Правда тогда нужно не забыть трансформировать полученные коэффициенты обратно.

4. R-квадрат для оценки результатов можно использовать очень условно. Вы не проверили есть ли у вас в данных:
a. Мультиколлинеарность коэффициентов. В случае наличия, ваши коэффициенты ошибочны. Именно высокий R2 и есть первым признаком мультиколлинеарности. Кстати, когда я вижу R2 больше 90%, это сразу повод усомниться в валидности вашей модели.
b. Heteroscedasticity (не знаю как это перевести на русский, но в общем дисперсия ошибок регрессии получается непостоянной. Результат — коэффициенты неэффективны и ошибочны. Зачем вам высокий R2, если найденные параметры неправильные?
c. Автокорреляция или серийная корреляция ошибок регрессии. Результат – почти все тесты коэффициентов регрессии будут ошибочны.
В любом из этих случаев, результаты всех моделей которые вы описали будут ошибочными, и R-квадрат как показатель оценки бесполезен. Да и построенный прогноз далек от реалий. Для выявления всех проблем существует множество тестов и измененных моделей.

5. И еще много чего можно обсудить в этой и прошлых статьях. Я не пытаюсь придираться, просто если вы хотите серьезно заниматься статистикой, начните с хороших книг, а не с питона.
Данная статья может быть интересна только как пример использования питона для статистических задач, но по-моему, это как микроскопом гвозди забивать. Если вам интересна статистика или эконометрика, возьмитесь за Стату, Матлаб, R, EViews.
Кстати, только что быстро прикинул Метод квадратов (OLS) для ваших данных по основным проблемам регрессии из пункта 4.

Итого:
Heteroskedasticity Test: Breusch-Pagan-Godfrey: F-test = 6,761, probability =0.0000
Итого, нулевая гипотеза про отсутвие Heteroscedasticity может быть отброшена.

Breusch-Godfrey Serial Correlation LM Test: F-test = 2,759, probability 0.0000
Ошибки регрессии кореллированы. Горе.

Jarque–Bera normality test:Test statistic: 20.49, Probability = 0.00003
О нормальности ошибок можно забыть. Модель ошибочна.

В общем, все плохо, и это только навскидку.
Данная статья и задумывалась, как пример использования python в качестве альтернативы указанным выше пакетам. По поводу теории буду признателен, если порекомендуете книги.
Если есть база в статистике, то можно начать с Гуджарати — хорошая вводная книга из набора «на пальцах» по многим направлениям в эконометрике. Я тут пока искал ссылки, даже случайно нашел pdf-скан на предыдущую версию.
Также неплохие пособия для начала — Вербек, Wooldridge

Немного сложнее уровень, на уровне магистерки — Джонстон и ДиНардо. Тоже обо всем по немногу.

На уровне аспирантуры — Библия Эконометриста. Но ее можно в основном как справочник использовать.

Ну а дальше уже куда специализация и интерес заведет.
По panel data — советую Baltagi, Wooldbridge
Time series — Hamilton, Bisgaard
Ну и еще с полторадесятка направлений есть (финансовая эконометрика, Censored data, Bayesian econometrics, Truncated and censored models, Discrete regression and Qualitative choice models, Duration analysis и тд и тп), в каждом свои знаковые авторы есть. Большинство книг можно найти в интернете отсканированными. Предыдущие версии обычно не намного хуже новинок, так как сама база как и в математике остается постоянной.
Если вас интересует именно практическая сторона, то поищите книги «заточенные» под какой-нибудь пакет. Например R, Stata, EViews
А если нет базы в статистике (а теорвер был давно и забылся за ненадобностью), какие бы книги посоветовали для начала?
увы, статистику я очень давно проходил. Не помню ни авторов, ни книг. Да и половина материала была лекторская. Погуглите форумы, там вроде можно найти отзывы как по русскоязычной, так и иностранной литературе.
Тема материалов для изучения по эконометрике заслуживает отдельного поста на хабре. Жалко, не могу ваш пост в закладки добавить.
2. Как можно заметить и матрицы с коэффициентами корреляции на y1,y2 больше значения оказывают X2 и X5, нежели X1 и X4, таким образом мы можем последние столбцы мы можем удалить.
Этот шаг как раз и подразумевал избавление от мультиколениарности т.к. между X2 и X1, и X5 и X4 соответствующие коэффициенты парной корреляции r > 90%. Разве не так?
Да, все правильно. Если рассматривать корелляцию между Х1 и Х2, то коэффициент корелляции между ними очень высок (-0.99), значит можно подразумевать мультиколлинеарность. Поэтому теоретически можно выбросить один из них – Х1 или Х2. То же относительно Х4 и Х5 – если они коррелируют, то скрипач одна переменная не нужна. Но даже в этом случае их нельзя выбросить просто так. Помните – про пиратов и температуру? Объяснение этому — Spurious relationship. Посмотрите интересные примеры, например, как кореллируют Индекс экспорта в США и продолжительность жизни мужчин в Австралии. Корреляция еще не означает что переменные взаимосвязаны и взаимозаменяемы. Надо поочередно выбросить по одной из переменной и посмотреть как изменятся результаты регрессии. Если коэффициенты значительно изменились, значит выбросили не напрасно. Или же с использовать что-то из серии Farrar-Glauber Test, Variance Inflation Factor test, и иже с ними.
Автор в целом был на правильном пути. Он собирался выбросить переменные из кореллирующих пар (X1, X2), (X4,X5). Но при этом говоря, что большее влияние оказывают X2 и X5, поэтому их и оставим. Ок, corr(X1,Y1)=0.62, corr(X2,Y1)=-0.66. Разница в влиянии – минимальна, и трудно сказать почему X2 лучше чем X1, особенно при наличии в модели еще шести переменных. Опять же – просто так взять и выбросить – нельзя. Только проверять.
Тогда такой вопрос, если я правильно понимаю, если мы применим метод главных компонент, то в принципе мы с большой долей вероятности избавимся от мультиколлениарности, так?
да, это поможет. в principal component analysis вы вместо измерения влияния отдельных переменных используете их средневзвешенное влияние.
Но проще выбросить ненужную переменную)
Я правильно понимаю, что чем ниже p-value, тем больше вероятность неправильности нулевой гипотезы? или же наоборот?
да, все так.
p-value указывает на вероятность нулевой гипотезы. Чем меньше p-value, тем более высокая вероятность что H0 неверна и ее можно отбросить.
Например, в обычной регрессии смотрим на p-values коэффициентов. H0 в данном случае утверждает что коэффициент при переменной равен нулю, т.е. наша переменная не имеет никакого влияния. Тогда низкая p-value (обычно меньше 10%, 5%, или 1%, в зависимости от выбранного уровня significancy), означает что вы можете отбросить нулевую гипотезу, и переменная нужна и важна)
Или, например, в тесте Breusch-Godfrey на серийную корелляцию, H0 — это гипотеза об отсутствии корелляции. В таком случае высокая p-val означает что гипотезу можно принять, и у вас есть корелляция.
Sign up to leave a comment.

Articles