Repository: tournesol-app/tournesol

Issue:
New quality criterion "Should be largely recommended"
This quality criterion will now become the only default quality criterion.

The main advantages are:
1. It makes rating a lot easier for newcomers.
2. It allows to integrate more easily artistic videos.
3. It will allow to calibrate the weight of other quality criteria.
4. Determine non-linearities in the way other quality criteria should affect the global scores.


Discussion:

Resolving patch:
diff --git a/backend/backend/constants.py b/backend/backend/constants.py
--- a/backend/backend/constants.py
+++ b/backend/backend/constants.py
@@ -16,6 +16,7 @@
 }
 
 featureColors = {
+    'largely_recommended': '#ff00ff',
     'reliability': '#6573c3',
     'pedagogy': '#8561c5',
     'importance': '#ff784e',
@@ -28,10 +29,11 @@
 }
 
 featureIsEnabledByDeFault = {
-    'reliability': True,
+    'largely_recommended': True,
+    'reliability': False,
     'pedagogy': False,
-    'importance': True,
-    'engaging': True,
+    'importance': False,
+    'engaging': False,
     'backfire_risk': False,
     'layman_friendly': False,
     'diversity_inclusion': False,
diff --git a/backend/backend/migrations/0099_auto_20210520_1521.py b/backend/backend/migrations/0099_auto_20210520_1521.py
new file mode 100644
--- /dev/null
+++ b/backend/backend/migrations/0099_auto_20210520_1521.py
@@ -0,0 +1,94 @@
+# Generated by Django 3.1.8 on 2021-05-20 15:21
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('backend', '0098_auto_20210504_2042'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='expertrating',
+            name='largely_recommended',
+            field=models.FloatField(blank=True, default=None, help_text='Should be largely recommended', null=True, validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(100.0)]),
+        ),
+        migrations.AddField(
+            model_name='expertrating',
+            name='largely_recommended_weight',
+            field=models.FloatField(default=1, help_text='Should be largely recommended weight', validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(8)]),
+        ),
+        migrations.AddField(
+            model_name='expertratingsliderchanges',
+            name='largely_recommended',
+            field=models.FloatField(blank=True, default=None, help_text='Should be largely recommended', null=True, validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(100.0)]),
+        ),
+        migrations.AddField(
+            model_name='historicalexpertrating',
+            name='largely_recommended',
+            field=models.FloatField(blank=True, default=None, help_text='Should be largely recommended', null=True, validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(100.0)]),
+        ),
+        migrations.AddField(
+            model_name='historicalexpertrating',
+            name='largely_recommended_weight',
+            field=models.FloatField(default=1, help_text='Should be largely recommended weight', validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(8)]),
+        ),
+        migrations.AddField(
+            model_name='userpreferences',
+            name='largely_recommended',
+            field=models.FloatField(default=0.0, help_text='Should be largely recommended', validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(100.0)]),
+        ),
+        migrations.AddField(
+            model_name='userpreferences',
+            name='largely_recommended_enabled',
+            field=models.BooleanField(default=True, help_text='largely_recommended given for ratings'),
+        ),
+        migrations.AddField(
+            model_name='video',
+            name='largely_recommended',
+            field=models.FloatField(default=0, help_text='Should be largely recommended'),
+        ),
+        migrations.AddField(
+            model_name='video',
+            name='largely_recommended_quantile',
+            field=models.FloatField(default=1.0, help_text='Top quantile for largely_recommended for all rated videos for aggregated scores. 0.0=best, 1.0=worst', validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(1.0)]),
+        ),
+        migrations.AddField(
+            model_name='video',
+            name='largely_recommended_uncertainty',
+            field=models.FloatField(default=0, help_text='Uncertainty for largely_recommended'),
+        ),
+        migrations.AddField(
+            model_name='videocomment',
+            name='largely_recommended',
+            field=models.BooleanField(default=False, help_text='Should be largely recommended', null=True),
+        ),
+        migrations.AddField(
+            model_name='videorating',
+            name='largely_recommended',
+            field=models.FloatField(default=0, help_text='Should be largely recommended'),
+        ),
+        migrations.AddField(
+            model_name='videorating',
+            name='largely_recommended_uncertainty',
+            field=models.FloatField(default=0, help_text='Uncertainty for largely_recommended'),
+        ),
+        migrations.AlterField(
+            model_name='userpreferences',
+            name='engaging_enabled',
+            field=models.BooleanField(default=False, help_text='engaging given for ratings'),
+        ),
+        migrations.AlterField(
+            model_name='userpreferences',
+            name='importance_enabled',
+            field=models.BooleanField(default=False, help_text='importance given for ratings'),
+        ),
+        migrations.AlterField(
+            model_name='userpreferences',
+            name='reliability_enabled',
+            field=models.BooleanField(default=False, help_text='reliability given for ratings'),
+        ),
+    ]
diff --git a/backend/backend/rating_fields.py b/backend/backend/rating_fields.py
--- a/backend/backend/rating_fields.py
+++ b/backend/backend/rating_fields.py
@@ -11,6 +11,7 @@
 MAX_VALUE = 100.
 
 VIDEO_FIELDS_DICT = OrderedDict([
+    ('largely_recommended', 'Should be largely recommended'),
     ('reliability', "Reliable and not misleading"),
     ('importance', "Important and actionable"),
     ('engaging', "Engaging and thought-provoking"),


Test patch: