I'm building a relevance ranking system for incidents occurrence and prevention. My goal is to use four attributes to establish relevance: tag (About 500 tags), x_coordinate, y_coordinate and time. The final state that I would like to achieve is: to select an object and have a relevance list from the most relevant objects, that correlate to the one that I've selected, to the least relevant ones.

Ex.: I have a list of events such as event A that represents a fork-lift accident in x_c=5, y_c=7, 22:10:59, tag["Crash"]. event B (fork lift speeding at x_c = 3, y_c = 5, 22:10:11, tag["Speeding"]). Event C (overheating on fork-lift 22:01:44, x_c=-4, y_c=-1, tag["Mechanical Issue:Overheating"]). Now I select event A and then I get a list of the most relevant events related to event A, usually when you crash the fork-lift is because of high-speed, and they tend to be spatially and timely near each other. Therefore, by selecting event A in my list of relevant events I get event B before event C in my list. The issue for me is that by encoding the tags I don't know if I'm keeping them relevant for my model, and they are suppose to be very relevant.

*Edit -> I believe it's also important to point-out the multi dimensional factor of the time attribute: both time difference between events and the time of the events are significant to their correlation. What do I mean? Some types of events are more likely to be correlated at certain times of day than others. For instance, fork-lift speeding and crashing happens more often in the morning rather than in the evening.

The two different approaches that I used to achieve this goal were:

Multi-linear regression to create a correlation function between the objects. This works to a certain extent, the problem is to encode the tags in a way that doesn't negatively influence the correlation.

Unsupervised learning, utilizing clustering and utilize the inertia between points to establish the relevance between the objects: low inertia=high relevance. Same issue here with the encoding, I must encode both labels and time-stamps (HH:mm:ss).

Please share your thoughts and let me know if there is any better approach or more optimal way of executing the approaches that I'm already using (I've wrote the scrips in python, so it's easy and fast to make changes before implementing the final version in a different platform).