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`):
```sql
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`.