Complex query performance in MySQL InnoDB versus MyISAM
In your case, your problem is RAM. Why?
In my old post What are the main differences between InnoDB and MyISAM?, I discuss how each Storage Engine does caching.

InnoDB has a Buffer Pool that cache data and index pages
MyISAM does no dedicated caching of data, only indexes. Data get cached in OS RAM.

Here is a picture from Vadim Tkechenko that shows what InnoDB looks like:

InnoDB has more housecleaning to do against the buffer pool as new data/index pages come in and old data/index pages get purged. MyISAM does not have any housecleaning of data to do.
You will need a Cloud Server with more RAM and a larger InnoDB Buffer Pool.
UPDATE 2015-03-20 18:00 EDT
If you can give more memory to the Buffer Pool without getting a bigger Cloud Server, that's fine.
If your Cloud Server is a dedicated DB Server, you should do 75% of RAM. So, that's 3G for innodb_buffer_pool_size. If your Cloud Server is a LAMP stack, perhaps 60% of RAM, which would be 2457M.
If you have lots of data, then I would suggest a Cloud Server with more RAM.
UPDATE 2015-03-20 18:06 EDT
I also noted that you said

There are some users that have a lot of detections (tens of thousands) per month.

If this means the table has lots on INSERTS, you should run this once a week
ANALYZE TABLE raw_detection;

Then, try the query again. The index statistics might be out of sync with the amount of data currently in the table.