Основные принципы алгоритмов трейда.
Показатели трейда
Ниже перечислены показатели, которые вычисляются для каждого трейдера и
используются как исходные данные для ведения трейда.
- RIN - общее количество
заходов(посещений). raw in.
- UIN - количество
уникальных заходов(посещений). unique in.
- PIN - количество заходов
через какой либо прокси сервер.
- FIN - количество
"фактических" заходов. FIN=RIN*<IN_FACTOR> (см.ниже).
- QIN - "качество" трафика.
QIN=FIN/RIN.
- RCL - общее количество
кликов(включая "галерные").
- OCL - количество кликов
на трейд(out).
- FCL - количество
"фактических" кликов. FCL=RCL*<CL_FACTOR> (см.ниже).
- QCL - "качество" кликов.
QCL=FCL/OCL.
- ROUT - общее количество
аутов на трейдера(включая повторные ауты).
- UOUT - количество
уникальных аутов.
- FOUT - "фактические"
ауты. FOUT=ROUT*<OUT_FACTOR> (см. ниже).
- FRCD - количество аутов,
отданных по форсам.
- RPR - общаяя
продуктивность. RPR=100*RCL/RIN.
- OPR
- "полезная" продуктивность. OPR=100*OCL/RIN.
- FPR - "фактическая"
продуктивность. FPR=100*FCL/FIN.
"Факторы".
Обычно в скриптах под античитом подразумеваются жесткие репрессии к тем
или иным видам "нарушений". К примеру, если речь идет о прокси, то их
просто не считают. А ведь все в этом мире относительно. Оверклики и
быстрые клики - тоже понятия довольно размытые. В любом случае
"качество" трейда оценивается в итоге лично владельцем сайта по
процентному содержанию тех или иных "нарушений". Поэтому в данном
скрипте вместо жестких репрессий введено поняти факторов(понижающих или
повышающих). В идеале, владелец сайта сам может задать значимость тех
или иных "нарушений" (язык, прокси, неуникальность, оверклики и тд). В
зависимости от этих установок будут расчитываться показатели FIN, FCL и
FOUT, которые и будут являть собой "чистые" значения, а отношения
FIN/RIN, FCL/OCL, FOUT/ROUT будут отображать "качество" трафика,
кликов и аутов соответственно. Таким образом, при условии
правильно подобранных факторов, в формуле трейда можно использовать
значение RIN, FCL и FOUT вместо стандартных RIN, OCL и FOUT. Если вам
все это кажеться очень запутанным, то на данный момент просто
фоспринимайте показатели FIN, FCL и FOUT как RIN, OCL и ROUT за вычетом
всяких разных "нарушений". Читая дальше, я думаю, вы поймете что это
немного большее... Теперь рассмотрим все факторы подробнее.
FIN
При вычислении показателя FIN используются следющие понижающие факторы:
- FCT_PROXY - фактор
понижения FIN если посетитель(бот) пришел через прокси сервер.
- FCT_INCNT - фактор
понижения FIN в зависимости от количества повторных(не уникальных)
заходов с данного IP адреса.
- FCT_LANG -
понижающий/повышающий фактор в зависимости от языка браузера.
Алгоритм вычисления FIN таков:
- FIN=FCT_LANG;
- Если посетитель пришел через прокси(PROXY_IN>0), то
FIN=FIN*FCT_PROXY;
- FIN=FIN*FCT_INCNT^(INCNT-1), где INCNT - количесто заходов с
этого IP адреса;
Рассмотрим несколько примеров. Прдположим что значения факторов равны
FCT_LANG=1 (для простоты предположим что нет языковых групп и
FCT_LANG=1), FCT_PROXY=0.3 и FCT_INCNT=0.6.
Пример 1.
Пришел посетитель с уникального IP и НЕ через прокси. Таким образом:
PROXY_IN=0 и INCNT=1 (первый заход). Вот что получается:
- FIN=1;
- PROXY_IN не больше нуля, так что FIN по FCT_PROXY не понижается.
- FIN=1*0.6^(1-1)=1*0.6^0=1*1=1
Таким образом этот заход начисляет следующие значения:
RIN +1, UIN +1, FIN +1.
Пример 2.
Пришел бот в пятый раз, но НЕ через прокси. PROXY_IN=0 и INCNT=5 (пятый
заход). Что имеем:
- FIN=1;
- без изменений.
- FIN=1*0.6^(5-1)=1*0.6^4=1*0.13=0.13;
За него мы начислим следующие значения:
RIN +1, UIN +0, FIN +0.13.
А если бы он еще и через прокси пришел, то FIN был бы(вы уже
догадались?) равен 0.13*0.3=0.04.
Справедливо?
FCL
При вычислении показателя FCL используются следующие факторы:
- FCT_PROXY - фактор
понижения FCL если посетитель(бот) пришел через прокси сервер.
- FCT_INCNT - фактор
понижения FCL в зависимости от количества повторных(не уникальных)
заходов с данного IP адреса.
- FCT_LANG -
понижающий/повышающий фактор в зависимости от языка браузера.
- FCT_GCL - понижающий
фактор, если клик идет не на аут, а на контент(OCL==0).
- FCT_OVROCL - понижение
FCL в зависимости от количества кликов на аут (overclicks).
- FCT_FASTCL - понижение
FCL при быстрых кликах.
Так же существует параметр MIN_PAUSE(в
секундах), который задает минимальную паузу между кликами, при которой
клики НЕ считаются быстрыми.
Алгоритм вычисления FCL таков:
- FCL=FCT_LANG;
- Если посетитель пришел через прокси(PROXY_IN>0), то
FCL=FCL*FCT_PROXY;
- FCL=FCL*FCT_INCNT^(INCNT-1), где INCNT - количесто заходов с
этого IP адреса;
- Если клик идет на контент(OCL==0), то FCL=FCL*FCT_GCL;
- FCL=FCL*FCT_OVROCL^(OCLCNT-1), где OCLCNT - количество кликов на
аут с этого IP;
- Если PAUSE(пауза с момента предыдущего клика или со времени
входа) меньше чем MIN_PAUSE, то FCL=FCL*FCT_FASTCL^(MIN_PAUSE-PAUSE);
С первыми тремя пунктами все точно так же как и при расчете FIN. А вот
для остальных пунктов не помешают примеры. Прдположим что значения
факторов равны FCT_GCL=0.2, FCT_OVROCL=0.9, MIN_PAUSE=6 и
FCT_FASTCL=0.6. Так же предположим что после первых трех пунктов FCL=1
(уникальный IP, НЕ через прокси).
Пример 1.
Первый клик (на контент). Работает только 4-й пункт: FCL=0.2;
Второй клик (на аут). PAUSE=8 (>MIN_PAUSE). Работает только пункт 5
(OCLCNT=1): FCL=1*0.9^(1-1)=1;
Третий клик (на аут). PAUSE=7 (>MIN_PAUSE). Опять (OCLCNT=2):
FCL=1*0.9(2-1)=0.9;
Четвертый клик (на контент). PAUSE=3 (<MIN_PAUSE). Работают пункты
4: FCL=0.2; и 6: FCL=0.2*0.6^(6-3)=0.2*0.22=0.4;
Пятый клик (на аут). PAUSE=4(<MIN_PAUSE). Работают пункты 5 и 6. По
пункту 5(OCLCNT=3): FCL=1*0.9^(3-1)=0.81, по пункту 6:
FCL=0.81*0.6^(6-4)=0.81*0.36=0.29;
Шестой клик (на аут). PAUSE=7(>MIN_PAUSE). Работает только пункт 5
(OCLCNT=4): FCL=1*0.9^(4-1)=0.73;
...
Десятый клик на аут. PAUSE=4(<MIN_PAUSE). Работают пункт 5
(OCLCNT=8): FCL=1*0.9^(8-1)=0.48; и пункт 6:
FCL=0.48**0.6^(6-4)=0.48*0.36=0.17;
Все просто :)
Понятно, что меняя факторы можно легко менять "политику" ведения
трейда, значимость тех или иных "нарушений", и уже в зависимости от
этого, скрипт будет "оценивать" трейдеров по вашим правилам. А правила,
как известно зависят от конкретной ситуации. Главное в любой ситуации
правильно ее(ситуацию) оценить, то есть выбрать подходящие факторы, при
которых показатели FIN и FCL в общей стистике по сиджу не будут сильно
отличаться от RIN и OCL соотвественно. Тогда относительно общей
статистики по сиджу, вы сможете легко определить негодяев и
неудачников, а скрипт сможет раздавать трафик более справедливо.
Другими словами, у вас есть инструмент, остальное зависит от вас :)
Алгоритм
Основной информацией при выборе трейдра, на которого нужно отправить
посетителя, является ТОП(рэйтинг) трейдеров.
Каждый трейдер взвешивается с помощью выбранной формулы(см. ниже) и
получает определенное количество очков(POINTS или PTS).
Кроме этого на каждую пару (IP, TRADER) считается OUT_CNT - сколько раз
посетитель сходил к трейдеру.
Другими словами, из множества всех трейдеров выбираются трейдеры с
наименьшим OUT_CNT. А уже из этих выбирается один с максимальным
значением POINTS. При этом значение OUT_CNT у выбранного трейдера
увеличивается на один.
При таком методе посетитель не будет отправлен на одного трейдера
второй(третий) раз, пока не пройдется по всем трейдерам.
Формулы
С помощью этих формул вычисляется значение POINTS для каждого трейдера.
В некоторых из этих формул могут быть использованы параметры описанные
выше(rin_effect и тд).
PROD
POINTS = CLICKS / IN
SUPER EFFECT
POINTS =
(rin_effect*RIN+uin_effect*UIN+fin_effect*FIN+rcl_effect*RCL+ocl_effect*OCL+fcl_effect*FCL)
/ (out_effect*OUT)
Эта более общая формула. На практике она сильно сокращается так как
большинство показателей не используется (effect'ы для них равны нулю).
Другими словами, подобная формула - всего лишь шаблон. Владелец сайта
сам может заточить под себя 'правила' трейда.
Вот несколько примеров получения более простых формул из этой.
rin_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = IN / OUT, то есть простой RATIO-трэйд.
ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = OCL / OUT, то есть трэйд с учетом эффективности.
rin_effect = 1, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (RIN+OCL) / (2*OUT), то есть трэйд с учетом
эффективности и объема трейда.
uin_effect = 1, ocl_effect = 2, все остальные effect'ы - по нулям.
Получаем POINTS = (UIN+2*OCL) / (3*OUT), более строгий трейд.
SUPER OWED
POINTS =
(rin_effect*RIN+uin_effect*UIN+fin_effect*FIN+rcl_effect*RCL+ocl_effect*OCL+fcl_effect*FCL)/out_effect
- OUT)
Для любителей TrafficDrive'а. Вот примеры реализации алгоритмов TD:
rin_effect = 1, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (RIN+OCL)/2 - OUT, trade type a.
ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = OCL - OUT, trade type c.
uin_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = UIN - OUT, trade type u.
rin_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = RIN - OUT, trade type r.
SUPER XPEHO-FIN
POINTS =
(RIN^rin_effect*UIN^uin_effect*FIN^fin_effect*RCL^rcl_effect*OCL^ocl_effect*FCL^fcl_effect*FCL)
/ (OUT^out_effect)
Эту формулу придумал не я. Я просто довел ее до такого беспредела :)
Есть такой замечательный кодер с замечательным ником - ХРЕНОДЕР.
Он то и придумал очень умную формулу трейда. По крайней мере я только в
его скрипте такое видел.
Вот его фирменная формула(далее цитата из мануала к XrenCJ):
FIN = (IN / OUT) * (CLICK / OUT) * QUAL
Показатель FIN равный 100% означает, что трейдер на каждый
отправленный к нему OUT прислал в среднем одного посетителя (IN)
нормального качества, который сделал на нашем CJ один CLICK.
Кому-то могут пригодиться и два производных от FIN алгоритма:
FIN EFFECT = (IN / OUT) * (CLICK / OUT) * (CLICK / OUT) * QUAL
FIN RATIO = (IN / OUT) * (IN / OUT) * (CLICK / OUT) * QUAL
В первом случае, как мы видим, клики имеют больший вес по сравнению с
юниками, во втором случае наоборот.
А вот как будет выглядеть реализация его фирменных алгоритмов:
uin_effect = 1, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (IN*OCL)/(OUT^2) = (IN/OUT)*(OCL/OUT), FIN
алгоритм.
uin_effect = 1, ocl_effect = 2, все остальные effect'ы - по нулям.
Получаем POINTS = (IN*OCL^2)/(OUT^3) = (IN/OUT)*(OCL/OUT)*(OCL/OUT), FIN
EFFECT алгоритм.
uin_effect = 2, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (IN^2*OCL)/(OUT^3) = (IN/OUT)*(IN/OUT)*(OCL/OUT), FIN
RATIO алгоритм.