Python и проблема «временной стоимости денег» - PullRequest
0 голосов
/ 04 марта 2010

(я задал этот вопрос сегодня утром, но я плохо объяснил себя. Позвольте мне повторить попытку)

У меня есть клиент, который является компанией по промышленному обслуживанию.Они продают сервисные соглашения, которые представляют собой предварительно оплаченные 20-часовые блоки технического времени.Некоторые из их крупных клиентов могут продлить срок действия этого соглашения в течение двух недель, в то время как клиенты с меньшим количеством проблем могут заключить тот же контракт на восемь месяцев.Я хотел бы использовать Python, чтобы помочь смоделировать прогнозируемый доход от продаж и определить, сколько оплачиваемых часов в месяц они потратят на крючок.

Если каждый клиент когда-либо покупал только один контракт на обслуживание (никогда не продлевался)было бы легко рассчитать продажи как monthly_revenue = contract_value * qty_contracts_sold.Оплачиваемые часы также будут простыми: billable_hrs = hrs_per_contract * qty_contracts_sold.Тем не менее, как я могу учитывать продления?Предполагая, что 90% (или какое-то другое произвольное количество) клиентов обновляются, их ежемесячный доход должен расти геометрически.Другой важной переменной является то, как долго средний клиент прожигает контракт.Как определить, какой доход и оплачиваемые часы будут через 3, 6 или 12 месяцев, исходя из различных скоростей обновления и сжигания?

Я предполагаю, что я использовал бы какой-то тип рекурсивной функции, кроме математикиникогда не был одним из моих сильных сторон.Любые предложения, пожалуйста?

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

Ответы [ 2 ]

1 голос
/ 04 марта 2010

Если вы хотите рассмотреть проблему с точки зрения приведенной стоимости будущего дохода (это то, что для меня означает «временная стоимость денег»), то у вас есть следующие параметры: ставка дисконтирования D (для удобства ежемесячно) , время T, которое потребует клиент, чтобы исчерпать свои предоплаченные часы, вероятность L, которую они обновят, когда их предоплаченные часы закончатся, суммы в долларах за первую продажу F и обновление R. Конечно, у этого есть несколько предположений (возможно, клиенты, которые потребляют поддержку быстрее например, с большей вероятностью возобновят - эта модель не учитывает это), но все же может оказаться полезным в первом приближении.

Итак, продажа сегодня стоит: F сразу же наверняка; плюс, через T месяцев, R больше с вероятностью L; плюс, через 2T месяцев, R больше с вероятностью L L; и так далее. Таким образом, цена этой продажи составляет F + R L / (D T) + R L L / (D 2T) + ... = F + (R * L / D T) * (1 + L / D T + L 2 / (D T) ** 2 + ...).

Ряд сходится к 1 / (1 - L / (D ** T)), поэтому общая формула в замкнутом виде (с переходом на Python; -):

def salesworth(D, T, L, F, R):
  return F + (R * L) / (D**T * (1 - L / (D**T))) 

Ожидаемые оплачиваемые часы можно рассчитать по той же формуле, просто используя для F и R количество часов в первой продаже и обновлении, и (если концепция ставки дисконта не применяется к оплачиваемым часам) D = 1 ( поэтому T на самом деле не имеет значения, так как 1 ** T == 1 для любого T; -).

0 голосов
/ 11 марта 2010

Спасибо за помощь, хотя мои требования были немного расплывчаты. После консультации с кем-то, кто чрезвычайно разбирается в финансовой математике, я решил, что простая формула не является подходящим решением.

Я закончил тем, что "разбил" месяцы на дни компонентов, используя xrange () и повторяя каждый день. Оценивая каждый день, я определял, был ли подписан новый контракт в этот день, и если да, то на какие даты в будущем контракт необходимо будет продлевать. Я поместил эти даты обновления в список, а затем суммировал значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...