shchur / ifl-tpp

Implementation of "Intensity-Free Learning of Temporal Point Processes" (Spotlight @ ICLR 2020)
https://openreview.net/forum?id=HygOjhEYDH
MIT License
80 stars 31 forks source link

Sampling points of a specific mark #17

Closed ritvik06 closed 2 years ago

ritvik06 commented 2 years ago

Hi, thanks for the wonderful code. I am able to use it easily and reproduce the results.

I wanted to sample points of a specific mark in a horizon, I would appreciate any pointers from you how I could do this with your code.

shchur commented 2 years ago

Hi, can you please elaborate what exactly you would like to do? If you want to sample entire trajectories over the forecast horizon but only care about one single mark, you could just generate the entire trajectories as follows

def select_mark(seq, mark: int):
    arrival_times = seq.inter_times.cumsum(-1)[:-1]
    return arrival_times[seq.marks == mark]

trajectories = model.sample(t_end=t_end, batch_size=100).to_list()
# e.g., select arrival times of events with mark #2
trajectories_for_mark = [select_mark(seq, mark=2) for seq in trajectories]

If you want to condition on some past sequence, you will need to get the context vector for the sequence that you want to condition on and pass it to model.sample.

ritvik06 commented 2 years ago

Thanks for your quick reply, this is really helpful.

I want to sample points of a specific mark given a historical sequence of events (basically forecasting). Do you think assigning the context_init arg as the historical embedding of the sequence in model.sample would work? Also do you think it's easy to rewrite model.sample with the refactored version of your code?

Thanks for your help again!

shchur commented 2 years ago

Yes, that's exactly what you should do. Just use model.get_features and model.get_context to obtain the history embedding, and then pass the last embedding to the model.sample function.