Some class names are currently really confusing and illogical. They should be renamed and the old names should be deprecated.
Start with:
Combination (model for product_attribute) should really be called Variant.
AttributeGroup should really be called Attribute (or VariantAttribute)
Attribute should really be called AttributeValue (or VariantAttributeValue)
Those are really the worst…