Experience, as there is no canonical feature set that applies to all problems. Feature sets instead tend to be domain-specific.
The usual iteration loop for a machine-learning system is:
1) Try features.
2) Evaluate your system. If you are happy with your scores/metrics, stop.
3) Do error analysis/run diagnostics. Go to 1.
It is the last step I find inexperienced people usually lacking. You need to examine your errors and find commonalities among them.
For example, is there a certain class of error that hints at a certain feature you haven't tried? Do your existing features provide decent results to begin with? Or maybe you should just get more data? Whatever path you take, it needs to be defensible.
So, in terms of general advice:
1) Realise it's an iteration loop, not a fixed recipe.
2) Be able to justify why you are trying whatever it is you are trying.
With time, you'll develop intuition for given domains.
The usual iteration loop for a machine-learning system is:
1) Try features.
2) Evaluate your system. If you are happy with your scores/metrics, stop.
3) Do error analysis/run diagnostics. Go to 1.
It is the last step I find inexperienced people usually lacking. You need to examine your errors and find commonalities among them.
For example, is there a certain class of error that hints at a certain feature you haven't tried? Do your existing features provide decent results to begin with? Or maybe you should just get more data? Whatever path you take, it needs to be defensible.
So, in terms of general advice:
1) Realise it's an iteration loop, not a fixed recipe.
2) Be able to justify why you are trying whatever it is you are trying.
With time, you'll develop intuition for given domains.