In a effort to reduce human intervention, I'm trying to optimize the process of assigning bank transactions to invoices. This task should be done once every year, so we can assume our dataset won't take more much more than 200 entities. About our invoices, they are already categorized, for example as "Water expenses","Electricity", etc... Each invoice has a value (€), a date and a description. About the information the bank transactions provide, we have a value (€), a date and a description too.

We can't naively compare each attribute in both dataset's because there might be outliers. What I mean is:

  • Difference between the invoice date, and transaction date are going to happen.
  • A transaction might not have the exact value of an invoice, it's possible a transaction was made to pay for different invoices and there's also the possibility an invoice required multiple payments at different times.
  • About the bank descriptive, it has no similarity with the invoice description, and there might be no pattern.

My idea, preprocess the data through clustering. Apply K-means on the bank transaction feed, has there will be similarity between groups (water expenses hopefully won't vary much in value, descriptives will be more or less similar), and after clustering try to assign each cluster to each category.

The problem is: the features all have different types, the description similarity we can compute through jaro-winkler's distance, the price tag: a simple euclidean distance will suffice, and the date: we aren't really looking for similarity, instead what I want is periodicity between dates (any metric I can use here btw?), how can i apply k-means with different feature types?!

This is my first real world problem with machine learning, so I'm looking for advice, is there any better way to solve the problem? Are there any flaw's in my plan? Would you approach the problem in a different way?!


Your Answer

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

Browse other questions tagged or ask your own question.