Random Forest where objective is not to replicate past classifications
Your target variable should always reflect what you're trying to optimize (maximize or reduce), so if you want to maximize revenue, you should make revenue your target variable. I would use the coupons as independent variables. When you want to see whether to offer a coupon or not for a particular customer, feed a new record into your model for every permutation of coupon / no coupon and see which has the highest prediction. There might be other/better ways of doing this, but I think this should get what you're looking for.