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