Общий алгоритм оценки времени работы высокодоходных интернет-проектов. Часть 2

Здесь я описал основные предпосылки к проведению имитационного моделирования работы интернет проектов.

Сегодня я планирую описать общий алгоритм этого процесса и некоторые необходимые функции.

Начну от простого к сложному.

Допустим, что каждый день в проект «приходят» новые участники. Обозначим количество участников, пришедших за день через n.

Понятно, что любой проект имеет некоторые этапы своего развития. Я предлагаю выделить три этапа. Это этап развития, этап стабильного существования и этап «умирания» проекта.

Логично предположить, что на каждом из этих этапов максимальное теоретически возможное количество новых участников за день будет различным. Вряд ли стоит ожидать большого количество новых участников на этапе развития или этапе «умирания» проекта. Скорее всего проект будет развиваться по такой схеме: количество новых участников ежедневно постепенно растет (нелинейно), за тем какое-то время сохраняется стабильность и за тем происходит спад до нуля (также нелинейно).

Чтобы описать этот процесс я предлагаю такую функцию, принимающую значения от 0 до 1 (это удобно для дальнейшей работы).

Функция "жизни" проекта

Эта функция описывается таким выражением:

n={1,p1<t<p2;  e(-ln(t/p1)^2), t≤p1;   e(-4*log(t/p2)^2), t≥p2}.               (1)

Здесь p1 – это время окончания этапа развития проекта, а p2 – время перехода проекта на этап «умирания».

График приведен для значений p1=150 b p2=180 дней (период стабильного прихода новых участников всего 30 дней).

Как видно из выражения (1), наша функция полностью детерминирована. В реальной жизни так не бывает. Поэтому дополнительно я внес некоторую долю случайности, используя генератор псевдослучайных чисел. И вот, что получилось:

flife2

А это уже ближе к реальности! Имеется общая закономерность в «рамках» которой имеются случайные отклонения в большую и меньшую сторону.

Вот скрипт №1 этой функции на языке R:

getf<-function(t,p1,p2)
{
  #Стабильное состояние (вторая фаза)
  y<-1
  #Развитие проекта (первая фаза)
  if(t<=p1)
  {y<-exp(-log(t/p1)^2)}
  #"Умирание" проекта
  if(t>=p2)
  {y<-exp(-4*log(t/p2)^2)}
  y<-y*0.8+runif(1,min=0,max=0.2)
  return(y)
}

 

В реальности количество вкладчиков – это величина целая. Поэтому, для наглядности и лучшего понимания, необходимо сделать перерасчет на целую величину. Для этого нам нужно предположить, какое максимальное количество вкладчиков nm может быть за день. За тем проделать следующее:

#Функция, которая возвращает количество вкладчиков
#в зависимости от времени
#nm - это максимальное количество вкладчиков за 1 день
getn<-function(t,nm,p1,p2)
{  return(round(getf(t,p1,p2)*nm)) }

Идем дальше.

Теперь необходимо определить функцию размера вклада d, сделанного каждым вкладчиком в отдельности.

Какой здесь может быть логика? Чем больше размер вклада – тем реже он делается. И наоборот, маленькие вклады – они делаются наиболее часто. Иными словами, вероятность того, что новый инвестор сделает маленький вклад больше, а что большой – меньше. То есть размер вклада – это случайная величина.

Я предлагаю такую случайную функцию, полигон частот для которой будет иметь примерно такой вид:

Полигон частот объёмов вкладов

Функция задаётся следующим образом:

d=1-β1/u.               (1)

Здесь β – это случайная величина, имеющая равномерное распределение, а u – коэффициент «спада». Чем больше значение u – тем чаще встречаются «мелкие» вклады и тем реже «крупные». При u=1 размер всех вкладов равновероятен.

Предложенная функция принимает значения от 0 до 1. Понятно, что в реальной жизни диапазон вкладов совсем другой и зависит от инвестиционной компании и тарифов, которые в ней предлагаются. Чтобы величина d принимала значения в заданном целочисленном диапазоне, установленном для вкладов, можно проделать следующее (на языке R):

d<-round(d*(maxd-mind)+mind)

Здесь maxd – максимально возможный клад, mind – минимально возможный вклад.

Вот функция (скрипт №2) на языке R:

#Функция генерации размера вкладов
#n - количество вкладчиков, mind - минимальный размер вклада
#maxd - максимальный размер вклада
getd<-function(n,mind,maxd,u)
{
  if (n<1) {return(0)}
  #Генерация
  d<-1-runif(n)^(1/u)
  #Перевод данных в диапазон в кладов
  d<-round(d*(maxd-mind)+mind)
  return(d)
}

Ну, а теперь, можно переходить описанию общего алгоритма оценки времени работы проекта:

  1. Определяем количество вкладчиков в текущий день n (скрипт №1) в зависимости от времени существования проекта t (изначально t=1);
  2. Определяем сумму поступивших в проект финансовых средств от каждого вкладчика v (зависит от n, скрипт №2);
  3. Определяем объём финансовых средств необходимых для очередной выплаты k (зависит от уже имеющихся вкладов);
  4. Определяем объём свободных финансовых средств r=r+v (объём увеличился на сумму вкладов);
  5. Делаем очередную выплату r=rk (объём уменьшился на сумму выплат);
  6. Если r>=0, то t=t+1 и возвращаемся на шаг 1. Иначе завершаем алгоритм (проект закрыт, время работы равно t);

Вот такой алгоритм и такие особенности его работы. В следующий раз я выберу конкретный проект и смоделирую его работу. На сегодня у меня все. Успехов!

Похожие статьи:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *