Why this exists, and how it works
Starisk is a second opinion on Coursera ratings. This page is the whole method — the reasoning, the arithmetic, the evidence, and what it cannot tell you.
1. The ratings stopped ranking anything
Coursera's headline ratings cluster. Across the 411 courses here, the mean is 4.68 and they run from 3.1 to 5.0. Two tenths of a star is not a difference in what you will get — it is rounding.
A number only helps you choose if it separates things. When everything is 4.8, the headline rating answers “is this a normal Coursera course?” rather than “is this one worth a month of my evenings?”
2. The reviews still disagree
Written reviews are where the disagreement lives, and learners vote on them. An upvote means “this is what I wish someone had told me.” That is the only quality signal Coursera collects and then averages away.
So Starisk reads the reviews learners voted most helpful, and trusts the endorsed ones more than the rest. That is the entire idea.
3. The arithmetic
For each course, from one page of reviews:
- Read the reviews Coursera surfaces as most helpful (about 20).
- Give each review the weight
√(1 + upvotes). - Score =
Σ(stars × weight) / Σ(weight), rounded to one decimal.
A review with 2 upvotes weighs 1.7; one with 80 weighs 9; one with 663 weighs 25.8. Votes still dominate a course's score — they just cannot own it.
4. Why the square root
The first version used 1 + upvotes, so a single review with 663 likes counted 663 times. On a course where one angry review collects every vote, that review is the score — and since upvoted reviews are often platform grievances rather than judgments of teaching, the number drifts away from the course.
Compressing the votes fixes that without discarding them. Every alternative that compresses — square root, logarithm, capping at ten votes, or ignoring votes entirely — scored about the same against a human ranking. The unbounded version scored worse.
5. Does it actually work?
The honest test is agreement with a human who took the courses. I labelled 29 of my own Coursera courses from memory, 1–5, without seeing what the model said, and compared rankings with Spearman's ρ.
| ranking | ρ vs my ranking |
|---|---|
| Coursera's headline rating | 0.42 |
The 2021 model, (2 + likes)² | 0.57 |
1 + likes (the first version) | 0.62 |
√(1 + likes) — what you see | 0.70 |
Coursera's own rating agrees with my experience at 0.42. The review model agrees at 0.70. That is the case for the whole project, stated as a number.
The caveat, in full. n = 29, so ρ carries roughly ±0.15 of uncertainty. A bootstrap gives the square-root model the edge in 79% of resamples, not 95%. And my labels are memories of courses taken in 2020–21, not measurements. Treat this as directional evidence plus a principled fix, not a proof.
6. What it measures, and what it doesn't
It measures
- What the most-endorsed reviews say about the course.
- How much the written reviews disagree with Coursera's rating.
- How split learners are — sometimes visible as a large gap.
It does not measure
- True quality, or whether the course suits you.
- Teaching quality specifically — many top reviews are about access, fees or certificates.
- The whole population: it reads ~20 reviews, then shows Coursera's full rating distribution beside them.
Where fewer than 15 reviews were readable, the course page says so instead of pretending.
7. How to read a score
Scores run from 1.0 to 5.0, like a star rating, but they mean something narrower: the average of the stars given by the reviews other learners endorsed.
- 4.5 and above — the endorsed reviews are as warm as Coursera's headline.
- 3–4.5 — the reviews are cooler, but not hostile.
- Below 3 — the reviews that other learners upvoted are critical.
The gap is worth more than the score. Inflation = Coursera minus Starisk: at or above 1.5 the headline is inflated, at or above 0.5 it is padded, otherwise it holds up. Right now, 57 of 411 courses are inflated and 238 hold up, with means of 4.68 and 4.13.
8. Reproduce it
The crawler and the scorer are one small Python package with no dependencies. It reads Coursera's server-rendered pages on demand, from a residential connection, and writes one JSON file that this site is built from.
/data/scores.json— the whole dataset, CORS-open.mise run pipeline:crawl— refresh a course.mise run pipeline:calibration— re-run the ranking test.
Reviews are read on the date shown on each course page. Scores are recomputed from those pages, not stored as editorial opinion. Starisk is not affiliated with Coursera.