I am not sure how to formulate this problem clearly into a machine learning task yet. So hope you guys can chime in and give me some help.

Problem : To predict whether someone will pick up their phone during office hours in week n+2 by looking at customer's behaviour in week n.

Data : I have calling records for about 3 months, which is aggregated on customer level. The various attributes include, num of calls, duration of calls, time of calls, amount of data traffic. But of course, these main attributes are further split into at about 20 attributes.

Current Approach (Very Manual) : I look at data at week n+2 and get the group of guys who picked up the phone during office hours (duration of calls > 5s and time of call). This is the target group, T.
I look at data at week n and manually try all possible combinations of the attributes to get as close to T as possible. But trying manually seems tiring after some time. The baseline is of course using the same conditions as at week n+2. But the whole idea will be to increase this number.

Question : Is there any way I can transform this dataset so that I would be able to do accomplish it as a machine learning task ?

  • $\begingroup$ Any chance of seeing a table of some rows of your data? You don't seem to have individual data (you say "aggregated on customer level") but want to predict for individuals? Do you have any individual-level data? $\endgroup$ – Spacedman Oct 10 '16 at 10:46
  • $\begingroup$ are you currently using any database or some spreadsheet files or using any programming language to load some text files. Because, by manual approach, it is not so clear. $\endgroup$ – chmodsss Nov 9 '16 at 14:30

You can try to build some kind of "sliding window table". Let's say you have following attributes:

  • call duration (x1)
  • time of call (x2)
  • picked the phone (x3)

Let's further assume that you have data from past 3 weeks, which allows us to set following table. The rows contain individual calls, the columns the attributes. The appendix _1 tells us the time. So for example x1_1 is call duration previous week, x2_2 is time of call two weeks before etc.

client | x1_1 | x2_1 | x3_1 | x1_2 | x2_2 | x3_2 | ... | x3_3

You can train your model using historical data, where x3_3 is last week. Then, you will feed the model with current data (_3 is current week*) and try to predict x3_3 - whether the customer will pick the phone.

*I am assuming that you know who you are going to call, hence you have _3 attributes, but you don' know yet whether they respond or not

The aim is to give the model the opportunity to learn the time dependencies - maybe time of call week before together with call duration strongly correlate with future chance of picking up the phone again.

What can also help is perform feature selection. The assumption is that some attributes are strongly correlated with others, whereas others are not. You can simply use x1_1, x2_1 and see the relationship to x3_1. But I'd suggest recalculate these often as the preferences might change in time.

| improve this answer | |
  • $\begingroup$ Hi, Actually the entire reason for this exercise is to predict who to call. Let me update my question so that it becomes a bit more clearer. $\endgroup$ – prog_guy Oct 10 '16 at 13:49
  • $\begingroup$ That doesn't change my proposition, you can calculate probabilities and call customers who are most likely to pick the phone. $\endgroup$ – HonzaB Oct 10 '16 at 14:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.