Как построить модель рекомендации для колл-перспективы - PullRequest
0 голосов
/ 22 октября 2019

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

Я создал столбец "Prodprobability", показывающий вероятность того, что PropertyID ответит на звонок по телефону вэтот час для истории звонков. Вместо того, чтобы просто пропустить свойство ID 233303.13 в любых вызовах, я хочу перенастроить их на 13 или 16 час (примерные данные не показывают, но вероятность получения в эти часы составляет 100% и 25% соответственно).

Итак, двигаясь вперед, основываясь на часе дня и истории того, как потенциальный клиент поднимает трубку или нет в течение этого часа, я бы хотел переориентировать каждый потенциальный клиент на часы, которые он, скорее всего, подберет. .

пример данных

РЕДАКТИРОВАТЬ: я думаю, мне нужна формула для этого: Если "S425 = 0", я хочу найти, где "A425" имеетсамая высокая вероятность в столбце S и возвращает час и вероятность для этого "PropertyID". Надеюсь, это имеет смысл.

РЕДАКТИРОВАТЬ:: образец даты возвращает это

1 Ответ

0 голосов
/ 22 октября 2019

Здесь возникает вопрос: не хотите ли вы создать «модель» или автоматизация работает для вас?

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

Что-то вроде:


require(dplyr)

todaysCall = df %>% 
  dplyr::group_by(propertyID) %>% 
  dplyr::summarise(noOfCalls = n())

hourlyCalls = df %>% 
  dplyr::filter(hour == format(Sys.time(),"%H")) %>% 
  dplyr::left_join(todaysCall) %>% 
  dplyr::arrange(desc(Prodprobability),noOfCalls)

По сути, получение вероятности срабатывания - это то, что моделивсе, и вы, кажется, уже имеете эту информацию.

Альтернативное решение

Получите топ-5 вызовов для каждого свойства ID

top5Times = df %>% 
  dplyr::filter(Prodprobability != 0) %>% 
  dplyr::group_by(propertyID) %>% 
  dplyr::arrange(desc(Prodprobability)) %>% 
  dplyr::slice(1:5L) %>% 
  dplyr::ungroup()

Получитьальтернативное время вызова для случаев с нулем Prodprobability:

zeroProb = df %>% 
  dplyr::filter(Prodprobability == 0)

alternateTimes = df %>% 
  dplyr::filter(propertyID %in% zeroProb$propertyID) %>% 
  dplyr::filter(Prodprobability != 0) %>% 
  dplyr::arrange(propertyID,desc(Prodprobability))

Наилучший час вызова для случаев с нулевой вероятностью в данный момент времени:

#Identifies the zero prob cases; can be by hour or at a particular instant
zeroProb = df %>% 
  dplyr::filter(Prodprobability == 0)

#Gets the highest calling probability and corresponding closest hour if probability is same for more than one timeslot

bestTimeForZero = df %>% 
  dplyr::filter(propertyID %in% zeroProb$propertyID) %>% 
  dplyr::filter(Prodprobability != 0) %>% 
  dplyr::group_by(propertyID) %>% 
  dplyr::arrange(desc(Prodprobability),hour) %>% 
  dplyr::slice(1L) %>% 
  dplyr::ungroup()

Возвращение количества записей в соответствии с исходным df:

zeroProb = df %>% 
  dplyr::filter(Prodprobability == 0) %>% 
  dplyr::group_by(propertyID) %>% 
  dplyr::summarise(total = n())

bestTimesList = lapply(1:nrow(zeroProb),function(i){
  limit = zeroProb$total[i]

  bestTime = df %>% 
    dplyr::filter(propertyID == zeroProb$propertyID[i]) %>% 
    dplyr::arrange(desc(Prodprobability)) %>% 
    dplyr::slice(1:limit)

  return(bestTime)
})

bestTimeDf = bind_rows(bestTimesList)

Примечание. Вы можете комбинировать операторы фильтра;Я написал их отдельно, чтобы подчеркнуть, что делает каждый шаг.

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