I don't know of any specific way to determine this, but here are some ideas.
First, determine whether your needs are to know that rule X is used by the application because menu item M uses it, or whether your needs are to know that rule X was ACTUALLY used, from which you would infer that menu item M was actually chosen.
For the first of those two choices, you'd want something that analyzes your rule references, and for the second, you want something that marks that a rule has actually been used.
SMA can help you with the second one, because some of the various vtable and caching screens only contain rules that have actually been used.
We have few tables which keeps the cache. If the rules are used, those will be present in these cache tables. From these tables you could know which rules are used and which are not being used or which are least used rules. You could get more idea on these tables from below link.
You can go to "actions > rule referencing" on a rule to see who refers to that rule. However, I know this isn't complete. For example, if activity X does a property-set on property P123, then the rule-referencing for P will show X, but if instead activity X has a java step that performs the equivalent of property-set on property P, then the rule-referencing for P will NOT show X even though it should.
However, if you type P123 in the developer portal find-rule field, and then choose "content . . . exact match . . .contains" you will see activity X regardless of whether activity X does real property-set or java-step equivalent. This is because the rule-content search indexes almost all text shown within the activity rule-form, including java source. /Eric