ReelShield / data-engineering /decade-analysis.md
abigailkeegan's picture
Deploy ReelShield to Hugging Face Space
8af1084
|
Raw
History Blame Contribute Delete
3.74 kB

Decade Analysis β€” Content Warning Trends

A worked analytics example over the live ReelShield cache. Computed against content_warnings.warnings_json joined to movies.year, grouped into decade buckets.

Snapshot date: 2026-05-08 Cache size at snapshot: 225 movies with generated warnings


1. Cache coverage by decade

Decade Count
1940s 2
1950s 3
1960s 9
1970s 14
1980s 16
1990s 34
2000s 52
2010s 61
2020s 33

Sample sizes pre-1970s are small (2–9 films/decade); read those rows with appropriate caution.


2. Average severity per category per decade (0–3 scale)

Category 1940s 1950s 1960s 1970s 1980s 1990s 2000s 2010s 2020s
violence_gore 0.50 0.67 0.67 1.29 1.12 1.56 1.08 1.44 1.36
self_harm_suicide 0.00 0.00 0.00 0.21 0.25 0.15 0.00 0.21 0.09
miscarriage_pregnancy_loss 0.00 0.00 0.00 0.00 0.00 0.06 0.04 0.11 0.00
sexual_content_nudity 0.00 0.00 0.11 0.43 0.44 0.68 0.35 0.56 0.42
animal_abuse 0.00 0.00 0.22 0.21 0.25 0.21 0.17 0.31 0.27
substances 0.50 0.33 0.56 0.71 0.31 0.82 0.52 0.67 0.52
language 0.50 0.67 0.44 0.86 0.75 1.35 0.88 1.21 0.97
horror_intensity 0.50 0.33 0.00 0.93 0.81 0.94 0.79 1.20 0.88
flashing_lights 0.00 0.00 0.00 0.14 0.25 0.41 0.25 0.48 0.61

3. Most consistent decade-over-decade increase

flashing_lights β€” increased in 5 of 8 decade transitions, net change +0.61, and is the only category that ends at its all-time high (2020s = 0.61). This aligns with the rise of post-2000s digital editing and high-contrast color grading, and is exactly the trend that motivated putting the photosensitive epilepsy banner at the top of every movie page.

For comparison:

  • sexual_content_nudity ties on transition count (5/8) but with a smaller net Ξ”.
  • violence_gore has the largest net rise (+0.86) but more zigzag (only 4/8 transitions trending up).

4. Highest average severity, all categories combined

2010s β€” mean 0.689 across all 9 categories (n = 549 category-severity values), narrowly edging out the 1990s at 0.686.


Caveats

  • Small sample sizes pre-1970s (2–9 movies/decade) make those rows noisy.
  • The 2020s sample only covers cached entries up to ~2024–25; the decade is incomplete.
  • Severities are Gemini-generated, not human-coded β€” the numbers reflect model perception of severity, which has known biases (e.g. it tends to under-report sexual content for older films).

Reproducing this analysis

The numbers above were generated by joining movies.year to the JSON in content_warnings.warnings_json. A representative query (SQLite, using json_extract):

SELECT
  (CAST(substr(m.year, 1, 3) AS INTEGER) * 10) || 's' AS decade,
  AVG(json_extract(c.warnings_json, '$.spoiler_free.violence_gore.severity'))     AS violence_gore,
  AVG(json_extract(c.warnings_json, '$.spoiler_free.self_harm_suicide.severity')) AS self_harm_suicide,
  AVG(json_extract(c.warnings_json, '$.spoiler_free.flashing_lights.severity'))   AS flashing_lights
  -- ... one AVG per category
FROM movies m
JOIN content_warnings c USING (tmdb_id)
WHERE m.year GLOB '[0-9][0-9][0-9][0-9]'
GROUP BY decade
ORDER BY decade;

The full per-category query lives in the team analysis notebook. Counts in Β§1 come from a simple GROUP BY decade over movies filtered to films that have an entry in content_warnings.