Finding Common Mistakes In Modelling With Mathematical Formalisms Using LLMs
Organizations: Ruhr University Bochum Bochum, Germany
Abstract
Modelling with mathematical formalisms like logical formulas, mathematical equations, or regular expressions is an important yet challenging task for students of computer science and other STEM disciplines. Identifying common mistakes occurring in this context is an important step towards helping struggling students by providing targeted high-quality feedback, e.g. in interactive learning systems. We present a tool-supported workflow that allows to (1) identify candidates for common mistakes that explain many student mistakes in large educational data sets, (2) cluster candidates according to similarities, and (3) visualize resulting clusters for instructors and CS education researchers. The visualization is designed to help researchers to identify common modelling mistakes. The candidates for common mistakes are represented by bug fixing transformations that translate incorrect formalizations into correct formalizations; they are generated by an LLM and validated algorithmically. We show that this approach works well by reproducing common mistakes in propositional logic modelling that were identified by hand in the literature; showing that, unlike other algorithmic approaches, the LLM-based approach is suitable for very large sets of data; and applying it to multiple other formalisms to showcase it generalizes beyond propositional logic.
Figures & tables
| Hand-picked mistake / transformations | # | % | #dst | %dst | example of (incorrect, correct) formula pairs | |
| Mistake: disjunction instead of conjunction | 334 | 5.47% | 61 | 3.88% | ||
| Transformations combined | 330 | 98.80% | 58 | 95.08% | ||
| 201 | 60.18% | 23 | 37.70% | |||
| 153 | 45.81% | 16 | 26.23% | |||
| 150 | 44.91% | 15 | 24.59% | |||
| 128 | 38.32% | 34 | 55.74% | |||
| PL | ML | CTL | |
| # total formula pairs | |||
| # modelling contexts | |||
| # statements to be modelled | |||
| # total clusters | 248 | 1585 | 271 |
| % total explained | % | % | % |
| # clusters explaining % | 78 | 132 | 62 |
Appendix figures & tables38 assets
Supplementary material from the paper’s appendix.
Appendix
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| Unexplained by ALL hand errors | 48 | 100.00% | 26 | 100.00% |
| Transformations combined | 13 | 27.08% | 12 | 46.15% |
| T1: | 4 | 8.33% | 3 | 11.54% |
| T2: | 1 | 2.08% | 1 | 3.85% |
| T3: | 1 | 2.08% | 1 | 3.85% |
| T4: | 1 | 2.08% | 1 | 3.85% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_ADD_OPERAND_TO_CONJUNCTION | 19 | 65.52% | 4 | 30.77% |
| Transformations combined | 0 | 0.00% | 0 | 0.00% |
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 2 | 6.90% | 2 | 15.38% |
| Transformations combined | 2 | 100.00% | 2 | 100.00% |
| T1: | 1 | 50.00% | 1 | 50.00% |
| T4: | 1 | 50.00% | 1 | 50.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 12 | 8.89% | 1 | 1.69% |
| Transformations combined | 12 | 100.00% | 1 | 100.00% |
| T2: | 12 | 100.00% | 1 | 100.00% |
| BUGGY_REPLACE_IMPLICATION_BY_CONJUNCTION | 10 | 7.41% | 3 | 5.08% |
| Transformations combined | 8 | 80.00% | 1 | 33.33% |
| T4: | 8 | 80.00% | 1 | 33.33% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_EQUIVALENCE_BY_CONJUNCTION | 1 | 100.00% | 1 | 100.00% |
| Transformations combined | 1 | 100.00% | 1 | 100.00% |
| T1: | 1 | 100.00% | 1 | 100.00% |
| Unexplained by ALL hand errors | 0 | 0.00% | 0 | 0.00% |
| Transformations combined | 0 | 0.00% | 0 | 0.00% |
| Whole file | 1 | 100.00% | 1 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 4 | 80.00% | 1 | 50.00% |
| Transformations combined | 4 | 100.00% | 1 | 100.00% |
| T1: | 4 | 100.00% | 1 | 100.00% |
| BUGGY_REPLACE_IMPLICATION_BY_CONJUNCTION | 1 | 20.00% | 1 | 50.00% |
| Transformations combined | 1 | 100.00% | 1 | 100.00% |
| T2: | 1 | 100.00% | 1 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 50 | 78.12% | 6 | 40.00% |
| Transformations combined | 50 | 100.00% | 6 | 100.00% |
| T1: | 50 | 100.00% | 6 | 100.00% |
| T2: | 50 | 100.00% | 6 | 100.00% |
| BUGGY_REPLACE_IMPLICATION_BY_CONJUNCTION | 7 | 10.94% | 3 | 20.00% |
| Transformations combined | 7 | 100.00% | 3 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_NAND_BY_DISJUNCTION | 2 | 40.00% | 1 | 25.00% |
| Transformations combined | 2 | 100.00% | 1 | 100.00% |
| T1: | 2 | 100.00% | 1 | 100.00% |
| BUGGY_ADD_OPERAND_TO_DISJUNCTION | 1 | 20.00% | 1 | 25.00% |
| Transformations combined | 0 | 0.00% | 0 | 0.00% |
| Unexplained by ALL hand errors | 2 | 40.00% | 2 | 50.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 3 | 1.46% | 2 | 1.61% |
| Transformations combined | 3 | 100.00% | 2 | 100.00% |
| T10: | 3 | 100.00% | 2 | 100.00% |
| BUGGY_REPLACE_CONJUNCTION_BY_DISJUNCTION | 2 | 0.97% | 2 | 1.61% |
| Transformations combined | 0 | 0.00% | 0 | 0.00% |
| BUGGY_REPLACE_NAND_BY_DISJUNCTION | 2 | 0.97% | 2 | 1.61% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_XOR | 91 | 50.00% | 2 | 6.25% |
| Transformations combined | 91 | 100.00% | 2 | 100.00% |
| T1: | 91 | 100.00% | 2 | 100.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_XOR | 21 | 11.54% | 1 | 3.12% |
| Transformations combined | 21 | 100.00% | 1 | 100.00% |
| T2: | 21 | 100.00% | 1 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REMOVE_NEGATION | 9 | 37.50% | 3 | 21.43% |
| Transformations combined | 9 | 100.00% | 3 | 100.00% |
| T4: | 9 | 100.00% | 3 | 100.00% |
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 4 | 16.67% | 2 | 14.29% |
| Transformations combined | 4 | 100.00% | 2 | 100.00% |
| T1: | 4 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_ADD_NEGATION | 24 | 33.80% | 6 | 15.00% |
| Transformations combined | 24 | 100.00% | 6 | 100.00% |
| T1: | 24 | 100.00% | 6 | 100.00% |
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 12 | 16.90% | 5 | 12.50% |
| Transformations combined | 12 | 100.00% | 5 | 100.00% |
| T2: | 12 | 100.00% | 5 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_EQUIVALENCE | 628 | 88.20% | 39 | 52.00% |
| Transformations combined | 626 | 99.68% | 38 | 97.44% |
| T1: | 344 | 54.78% | 20 | 51.28% |
| T2: | 282 | 44.90% | 18 | 46.15% |
| BUGGY_REPLACE_CONJUNCTION_BY_EQUIVALENCE | 35 | 4.92% | 10 | 13.33% |
| Transformations combined | 35 | 100.00% | 10 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 6 | 25.00% | 3 | 17.65% |
| Transformations combined | 6 | 100.00% | 3 | 100.00% |
| T1: | 6 | 100.00% | 3 | 100.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_REVERSED_IMPLICATION | 2 | 8.33% | 2 | 11.76% |
| Transformations combined | 2 | 100.00% | 2 | 100.00% |
| T2: | 2 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_CONJUNCTION_BY_IMPLICATION | 40 | 29.63% | 2 | 4.00% |
| Transformations combined | 40 | 100.00% | 2 | 100.00% |
| T1: | 40 | 100.00% | 2 | 100.00% |
| T16: | 13 | 32.50% | 1 | 50.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_IMPLICATION | 10 | 7.41% | 2 | 4.00% |
| Transformations combined | 9 | 90.00% | 1 | 50.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 73 | 20.05% | 3 | 3.16% |
| Transformations combined | 73 | 100.00% | 3 | 100.00% |
| T1: | 65 | 89.04% | 2 | 66.67% |
| T2: | 65 | 89.04% | 2 | 66.67% |
| T3: | 65 | 89.04% | 2 | 66.67% |
| T28: | 65 | 89.04% | 2 | 66.67% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 37 | 45.12% | 2 | 6.25% |
| Transformations combined | 37 | 100.00% | 2 | 100.00% |
| T1: | 28 | 75.68% | 1 | 50.00% |
| T2: | 9 | 24.32% | 1 | 50.00% |
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 5 | 6.10% | 2 | 6.25% |
| Transformations combined | 5 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_ADD_NEGATION | 16 | 39.02% | 2 | 12.50% |
| Transformations combined | 16 | 100.00% | 2 | 100.00% |
| T1: | 15 | 93.75% | 1 | 50.00% |
| T11: | 1 | 6.25% | 1 | 50.00% |
| BUGGY_REMOVE_NEGATION | 6 | 14.63% | 2 | 12.50% |
| Transformations combined | 6 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 137 | 47.24% | 1 | 4.35% |
| Transformations combined | 137 | 100.00% | 1 | 100.00% |
| T1: | 137 | 100.00% | 1 | 100.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_REVERSED_IMPLICATION | 54 | 18.62% | 2 | 8.70% |
| Transformations combined | 54 | 100.00% | 2 | 100.00% |
| T2: | 49 | 90.74% | 1 | 50.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_CONJUNCTION_BY_DISJUNCTION | 6 | 17.65% | 2 | 9.09% |
| Transformations combined | 6 | 100.00% | 2 | 100.00% |
| T1: | 6 | 100.00% | 2 | 100.00% |
| BUGGY_REMOVE_NEGATION | 5 | 14.71% | 2 | 9.09% |
| Transformations combined | 5 | 100.00% | 2 | 100.00% |
| T2: | 4 | 80.00% | 1 | 50.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 18 | 52.94% | 4 | 23.53% |
| Transformations combined | 18 | 100.00% | 4 | 100.00% |
| T1: | 18 | 100.00% | 4 | 100.00% |
| T9: | 18 | 100.00% | 4 | 100.00% |
| BUGGY_REPLACE_CONJUNCTION_BY_DISJUNCTION | 3 | 8.82% | 2 | 11.76% |
| Transformations combined | 3 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 61 | 58.65% | 4 | 19.05% |
| Transformations combined | 61 | 100.00% | 4 | 100.00% |
| T1: | 61 | 100.00% | 4 | 100.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_IMPLICATION | 20 | 19.23% | 4 | 19.05% |
| Transformations combined | 20 | 100.00% | 4 | 100.00% |
| T2: | 20 | 100.00% | 4 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 25 | 37.31% | 7 | 23.33% |
| Transformations combined | 25 | 100.00% | 7 | 100.00% |
| T1: | 14 | 56.00% | 2 | 28.57% |
| T2: | 7 | 28.00% | 2 | 28.57% |
| T7: | 7 | 28.00% | 2 | 28.57% |
| T11: | 2 | 8.00% | 1 | 14.29% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REMOVE_NEGATION | 52 | 100.00% | 2 | 100.00% |
| Transformations combined | 52 | 100.00% | 2 | 100.00% |
| T1: | 52 | 100.00% | 2 | 100.00% |
| Unexplained by ALL hand errors | 0 | 0.00% | 0 | 0.00% |
| Transformations combined | 0 | 0.00% | 0 | 0.00% |
| Whole file | 52 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 36 | 78.26% | 7 | 46.67% |
| Transformations combined | 36 | 100.00% | 7 | 100.00% |
| T1: | 34 | 94.44% | 5 | 71.43% |
| T7: | 2 | 5.56% | 2 | 28.57% |
| BUGGY_REPLACE_NOR_BY_CONJUNCTION | 4 | 8.70% | 2 | 13.33% |
| Transformations combined | 4 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_PULL_NEGATION_CONJUNCTION | 67 | 12.48% | 13 | 7.78% |
| Transformations combined | 67 | 100.00% | 13 | 100.00% |
| T3: | 61 | 91.04% | 12 | 92.31% |
| T4: | 61 | 91.04% | 12 | 92.31% |
| T17: | 6 | 8.96% | 1 | 7.69% |
| BUGGY_REPLACE_XOR_BY_NAND | 44 | 8.19% | 5 | 2.99% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_ADD_NEGATION | 1 | 100.00% | 1 | 100.00% |
| Transformations combined | 1 | 100.00% | 1 | 100.00% |
| T1: | 1 | 100.00% | 1 | 100.00% |
| Unexplained by ALL hand errors | 0 | 0.00% | 0 | 0.00% |
| Transformations combined | 0 | 0.00% | 0 | 0.00% |
| Whole file | 1 | 100.00% | 1 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 446 | 50.06% | 5 | 5.75% |
| Transformations combined | 443 | 99.33% | 3 | 60.00% |
| T1: | 443 | 99.33% | 3 | 60.00% |
| T2: | 443 | 99.33% | 3 | 60.00% |
| T3: | 443 | 99.33% | 3 | 60.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_REVERSED_IMPLICATION | 202 | 22.67% | 4 | 4.60% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 277 | 45.26% | 20 | 10.10% |
| Transformations combined | 274 | 98.92% | 18 | 90.00% |
| T3: | 239 | 86.28% | 4 | 20.00% |
| T7: | 35 | 12.64% | 14 | 70.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_REVERSED_IMPLICATION | 33 | 5.39% | 4 | 2.02% |
| Transformations combined | 33 | 100.00% | 4 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 138 | 28.34% | 33 | 15.21% |
| Transformations combined | 138 | 100.00% | 33 | 100.00% |
| T1: | 117 | 84.78% | 20 | 60.61% |
| T4: | 21 | 15.22% | 13 | 39.39% |
| BUGGY_REPLACE_DISJUNCTION_BY_CONJUNCTION | 47 | 9.65% | 17 | 7.83% |
| Transformations combined | 47 | 100.00% | 17 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 19 | 32.76% | 2 | 11.11% |
| Transformations combined | 19 | 100.00% | 2 | 100.00% |
| T1: | 11 | 57.89% | 1 | 50.00% |
| T7: | 8 | 42.11% | 1 | 50.00% |
| BUGGY_ADD_NEGATION | 3 | 5.17% | 2 | 11.11% |
| Transformations combined | 3 | 100.00% | 2 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 50 | 30.12% | 10 | 12.05% |
| Transformations combined | 50 | 100.00% | 10 | 100.00% |
| T1: | 44 | 88.00% | 7 | 70.00% |
| T11: | 6 | 12.00% | 3 | 30.00% |
| BUGGY_ADD_NEGATION | 21 | 12.65% | 10 | 12.05% |
| Transformations combined | 21 | 100.00% | 10 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 164 | 35.12% | 1 | 3.70% |
| Transformations combined | 164 | 100.00% | 1 | 100.00% |
| T1: | 164 | 100.00% | 1 | 100.00% |
| BUGGY_REPLACE_EQUIVALENCE_BY_IMPLICATION | 156 | 33.40% | 2 | 7.41% |
| Transformations combined | 152 | 97.44% | 1 | 50.00% |
| T2: | 152 | 97.44% | 1 | 50.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_EQUIVALENCE_BY_CONJUNCTION | 5 | 13.89% | 1 | 4.55% |
| Transformations combined | 5 | 100.00% | 1 | 100.00% |
| T1: | 5 | 100.00% | 1 | 100.00% |
| BUGGY_REPLACE_CONJUNCTION_BY_DISJUNCTION | 4 | 11.11% | 1 | 4.55% |
| Transformations combined | 4 | 100.00% | 1 | 100.00% |
| T7: | 4 | 100.00% | 1 | 100.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_CONJUNCTION_BY_DISJUNCTION | 30 | 83.33% | 5 | 62.50% |
| Transformations combined | 30 | 100.00% | 5 | 100.00% |
| T3: | 15 | 50.00% | 1 | 20.00% |
| T4: | 9 | 30.00% | 2 | 40.00% |
| T1: | 5 | 16.67% | 1 | 20.00% |
| T2: | 1 | 3.33% | 1 | 20.00% |
| Hand-picked mistake / Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| BUGGY_REPLACE_IMPLICATION_BY_REVERSED_IMPLICATION | 1418 | 23.22% | 105 | 6.68% |
| Transformations combined | 1414 | 99.72% | 102 | 97.14% |
| T169: | 1343 | 94.71% | 80 | 76.19% |
| T184: | 172 | 12.13% | 37 | 35.24% |
| T210: | 55 | 3.88% | 17 | 16.19% |
| T293: | 8 | 0.56% | 1 | 0.95% |
| Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| Whole data set | 6106 | 100.00% | 1572 | 100.00% |
| ANY transformation explained | 5156 | 84.44% | 955 | 60.75% |
| Cluster 1 | ||||
| T169: | 1343 | 21.99% | 80 | 5.09% |
| T184: | 172 | 2.82% | 37 | 2.35% |
| Cluster 2 | ||||
| Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| Whole data set | 12482 | 100.00% | 3951 | 100.00% |
| ANY transformation explained | 9910 | 79.39% | 2333 | 59.05% |
| Cluster 1 | ||||
| T960: | 707 | 5.66% | 162 | 4.10% |
| T1035: | 32 | 0.26% | 1 | 0.03% |
| T1758: | 16 | 0.13% | 1 | 0.03% |
| Transformations | # | % | #dst | %dst |
|---|---|---|---|---|
| Whole data set | 7210 | 100.00% | 2695 | 100.00% |
| ANY transformation explained | 2588 | 35.89% | 409 | 15.18% |
| Cluster 1 | ||||
| T2: | 215 | 2.98% | 9 | 0.33% |
| T304: | 36 | 0.50% | 2 | 0.07% |
| T222: | 28 | 0.39% | 1 | 0.04% |
Educational Data Mining
Educational Data Mining studies computational methods for analyzing learning data to understand learners, improve instruction, and support educational decisions.
See all 74 papers