It looks like your final goal is to predict churn for a given time horizon. In that task, you will have a snapshot of the data at a time t and use it to make predictions. You need to reproduce these conditions in your training dataset, but let's first talk about what is "time dependent".
A) How is your dataset time dependant?
Your dataset evolve in time, but I don't think that time should be a dependent variable here. Indeed, what can (continuous) time tell you about the likelihood of a customer to churn? You can transform your dataset to eliminate the dependence on time. Here is how:
- When you use
service_start_date and service_end_date, I think what is really important for churn prediction is to know about the duration of the service. You can do some feature engineering and replace service_start_date by time_from_subscription and service_end_date by time_to_end_of_subscription. This implies however that you create a dataset for a given date, I will develop that in part B. Be careful however, if your service has only one possible duration you will have redundant features so in that case you should only keep one.
- If your service subscription is likely to be affected by time you surely can encode that in a different way. As an example if your service is the amazon prime trial, people might subscribe to benefit from it during the Christmas period and then churn out. This can be encoded by including the month as a categorical variable.
In a general way, you should wonder if time itself can explain the churn, or if it is just a proxy to another variable that you could express in a time independent manner, and I think that for what you are doing it should be possible. Of course I have no knowledge of the service you are studying, so I can be wrong but I will be happy to update this answer if needed!
B) How to create the training dataset?
If it is possible to transform the dataset as explained just above, it will be easier to create a train dataset. In order to mimic the prediction task, you will have to use one or several dates to create snapshots of the data and combine these snapshots into one training dataset (you will actually be doing sampling over time). The variables time_from_subscription, time_to_end_of_subscription and maybe other will be different according to the snapshots. The target will be different also, you will have to use something like churn_in_three_months instead of have_churned.
The number and frequency of snapshots will depend on the dataset. Overall, the final dataset should be representative for all possible values taken by the variables. If you have the column month, you will need at least one snapshot per month. You will also have to look at the distributions of the variables in your final dataset and estimate whether the sampling has been done right.
Last remark: if you use the strategy I described here, you should be careful with the evaluation metrics you will use. Indeed, let's say that you predict churn_in_three_months=True but in the training dataset churn_in_three_months=False. If the client actually churned three months and one week later, is it still a bad prediction?