For example, you might have a weight with WPs at 0.5 and 1.0. If you have some dataPoints that need WPs at 0.3 and 1.0 (but not at 0.5), you can first try to use layers (see 5.4 WeightPosition Layers). The problem with this is that either the WP at 0.3 “sees” the 0.5 WP or the WP at 0.5 “sees” the 0.3 WP. To get them really independent, you create a separate WPG with WPs at 0.3 and 0.5, like this:
An example would be the mouth, which needs an inbetween at 0.5 for a curved motion. On the other hand, many shapes may need corrections when the lips touch at e.g. 0.2 or 0.3.
DataPointGroups (DPGs) relate to this in the following way: A group of dataPoints that all use WPs of exactly the same set of weights (i.e. they belong to a DPG) also have to use WPs of the same WPGs of the respective weights.
The reason for this is that you could get cycles in the dependency on which shape influences which (you could think of a self-influencing dataPoint that can never determine how it should look).
Keeping the above DPG-rule in mind, you can think of WPGs as creating a virtual “copy” of the weight, so that you have one slider but several configurations in the BCS for it.
As a general rule, WPGs should only be used when really needed since they can easily make the setup much more complex and harder to manage.