I have been thinking about this idea.
The software presents as if it has been constructed as entity types and when I look at them I single a relation that implements through interface rather than via strong inheritance.
As an Entity, this can be expressed through a recursive self-relationship.
Similarly, this means you can cross aggregate any of the underlying data captured in learning and cross compare Systems and versions of Systems across a population. On the code side, you can cast the types any way that you might want to slice them for the data analysis.
Can I see your data model?