ML: difference between partition_field_name and by_field_name?

Yes, that's pretty much it. Think of using partition_field_name as practically the equivalent of N number of single metric jobs, one for every value of partition_field_name (with a cardinality of N). The scoring for anomalies in a partition (since version 6.5) is very independent of anomalies in other partitions.

So, utilize partition_field_name for logical splits that should be more independent from each other.