Анализ поперечных сечений временных рядов (панельный анализ) в Python Statsmodels

#python-2.7 #time #pandas #time-series #statsmodels

#python-2.7 #время #pandas #временные ряды #statsmodels

Вопрос:

У меня есть функция, ctr =function(Win rate, Avg win price, Avg bid floor, CTR with time lags) , где «Среднее значение» является просто «репрезентативным» для этого часового снимка, мы могли бы также использовать среднее значение и спреды.

где CTR = показатель кликов по приложению, средняя цена выигрыша — его средняя цена выигрыша, а средний коэффициент выигрыша = общее количество выигранных ставок / общее количество размещенных ставок (среднее значение за моментальный снимок периода времени).. и так далее.

Я хочу смоделировать эту функцию для поперечного сечения из 3000 приложений, чтобы сначала спрогнозировать CTR за текущий период времени с учетом задержек, а затем я получаю «дельту», которая сообщает мне, сколько нужно добавить к каждой цене выигрыша для каждой ставки (поскольку я должен предлагать цену выше среднеговыигрышная цена, чтобы выиграть эту ставку) — идея состоит в том, чтобы смоделировать ctr таким образом, чтобы, если приложение не работает в течение определенного периода времени, я не рассматривал его как «плохое приложение», тем самым снижая цену предложения для этого приложения, или прекратить все вместе предлагать цену для этого приложения,который устанавливает нисходящий цикл.

Вот как выглядят мои данные.

Временная метка 1: Appid 1, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 2: Appid 1, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 3: Appid 1, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 4: Appid 1,Коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 5: Appid 1, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 6: Appid 1, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr

Следовательно, элемент поперечного сечения, поскольку точки данных предназначены для каждого отдельного приложения

Временная метка 1: Appid 2, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 2: Appid 2, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 3: Appid 2, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 4: Appid 2,Коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 5: Appid 2, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr
Временная метка 6: Appid 2, коэффициент выигрыша, средняя цена выигрыша, среднее значение ставки, Ctr

У меня есть больше временных меток для учета задержек, но я не хочу этого делать, поскольку я знаю, что скорость приложения зависит от времени суток и будет сильно уменьшаться в течение 6-часового окна. В сутках 24 часа, если разбить их на утро, день, вечер и ночь, получится = 24/4 = 6 часов.

Вопрос :

Как мне принять во внимание индекс поперечного сечения ? Я предполагаю, что если я хочу смоделировать это как VAR (поскольку три являются несколькими эндогенными точками данных временных рядов) — даже с помощью VAR я не смог найти способ учесть «индекс» поперечного сечения. То, что я хочу (для перекрестных данных — это это отношение -:

CTR (t) = коэффициент выигрыша (t-1) коэффициент выигрыша (t-2).. (t-3, t-4, t-5) ctr (t-1) ctr (t-2) .. ctr (t-5) средняя цена выигрыша(t-1) средняя цена выигрыша (t-2) .. средняя цена выигрыша (t-5) средняя минимальная ставка (t-1) средняя минимальная ставка (t-2) .. средняя минимальная ставка (t-5)

и затем модель delta = на сколько больше нужно сделать ставку по сравнению со средней ценой выигрыша

дельта (t) = средняя цена выигрыша (t-1) средняя цена выигрыша (t-2) …средняя цена выигрыша (t-5) коэффициент выигрыша (t-1) коэффициент выигрыша (t-2) .. (t-3, t-4, t-5)

Вот что я быстро попробовал, но хотел бы смоделировать на уровне поперечного сечения, предполагая, что мой вариант использования подходит так хорошо?

 import pandas as pd
ctr = []
for hour in range(24):
    data = pd.read_csv('C:/Users/Desktop/exchange_snapshots/2014-6-20_hour='   str(hour)   '.txt', sep='|', index_col = False, names = ['appid', 'app_ctr', 'win_rate', 'avg_win_price', 'avg_adnear_price'])
    data = data[data['app_ctr'] > 0.000000] #chopping off the points that have 0 as the recorded ctr in the last time period snapshot
    ctr.append(data['app_ctr'].mean())  # I want to be doing teh cross section bit, so I dont have to do the mean ctr of EACH day
date_index = pd.date_range('20/6/2014', periods = 24, freq = 'H')
data_time = pd.DataFrame(ctr, date_index, columns = ['ctr'])

import statsmodels.tsa.arima_model as ari
#class statsmodels.tsa.arima_model.ARMA(endog, order=None, exog=None, dates=None, freq=None, missing='none')[source]
model = ari.ARMA(data_time['ctr'], (3, 0)).fit()
print model.params

const        0.023628
ar.L1.ctr   -0.186219
ar.L2.ctr   -0.211046
ar.L3.ctr   -0.156402
dtype: float64
 

ВЫВОД, который я сделал до сих пор на основе простого группового анализа -:
https://gist.github.com/vincentarelbundock/5053686

 #Sample Example to demonstrate from this code
     firm    year   sector   emp         wage     capital   output
1   1   1977    7   5.0409999   13.1516 0.58939999  95.707199
2   1   1978    7   5.5999999   12.3018 0.6318  97.356903
3   1   1979    7   5.0149999   12.8395 0.6771  99.608299
4   1   1980    7   4.7150002   13.8039 0.6171  100.5501
5   1   1981    7   4.0929999   14.2897 0.50760001  99.558098
6   1   1982    7   3.1659999   14.8681 0.42289999  98.615097
7   1   1983    7   2.9360001   13.7784 0.39199999  100.0301
8   2   1977    7   71.319  14.7909 16.9363 95.707199
9   2   1978    7   70.642998   14.1036 17.242201   97.356903
10  2   1979    7   70.917999   14.9534 17.5413 99.608299
11  2   1980    7   72.030998   15.491  17.6574 100.5501
12  2   1981    7   73.689003   16.196899   16.713301   99.558098
13  2   1982    7   72.418999   16.131399   16.246901   98.615097
14  2   1983    7   68.517998   16.305099   17.3696 100.0301
 

Что мне нужно знать -:

  1. Интеграция моей конкретной модели с переменными x1, x2, x3, y — все меняется во время дополнительного анализа — соответствует ли приведенный выше код (и образец) этому варианту использования? Более конкретно, использование y с его собственными задержками (t-1 .. t-5) для регрессии на t .
  2. Я полагаю, что этот анализ для appid также выполняется по «Стране» (в данном случае это может быть «сектор»).
  3. Есть ли что-то более строгое? С тех пор, как я впервые опубликовал этот вопрос, у меня появились некоторые зацепки, но я хотел бы узнать больше.