Photofeeler score calculator

How Photofeeler scores a photo

Voters click one of four buttons for each trait: No, Somewhat, Yes or Very.

  1. Each button pulls toward a score

    On Attractive, enough votes of one kind would settle near 2.2 for No, 5.1 for Somewhat, 9.2 for Yes and 10 for Very.

  2. Harsh voters' votes are worth more

    Photofeeler tracks each voter's lean: how harsh they usually are, from 0 (generous) to 10 (harsh). A harsh voter's Yes is worth more, and their No hurts less.

  3. Yes and Very count for less

    In our fitted formula, a Yes counts for 49 to 54% of a full vote, and a Very for 31 to 33%, depending on the trait. These are model weights, rather than Photofeeler's actual voter weights.

  4. Every test starts near 6

    Each test starts as if about 1.5 voters had already given it a 6.2, so a few votes can't swing it far. One Yes alone gives about 7.2.

  5. You get a score and a range

    The score works like a percentile, so Photofeeler labels a 9.0 "Top 10%". A shaded range shows where it could still land and narrows as votes come in.

Try it

Set how many voters clicked each button and how harsh they are. It starts as a typical 20-vote test.

Estimated Attractive score

6.9/10

Likely range 5.7–8.2from 20 votes

An estimate of the range Photofeeler would report from these votes.

One more vote would change it by

  • No−0.21
  • Somewhat−0.09
  • Yes+0.09
  • Very+0.24

Votes

How many voters clicked each button. Most tests get 10 or 20 votes; some get 40.

No
Somewhat
Yes
Very

Voter lean

How harsh those voters usually are, from 0 (generous) to 10 (harsh). Starts at the averages in our data.

No
Somewhat
Yes
Very

An unofficial estimate based on 760 tests of men aged 24 to 42, rated mostly by women. The data covers 3–50 votes per test; estimates outside that range are extrapolations. If you already have scores, the percentile calculator shows how rare they are.

What each vote is worth

Each trait has its own numbers. Pick one to compare.

ButtonPulls towardCounts forHarsh vs generous voter
No2.278%+0.14
Somewhat5.174%+0.16
Yes9.254%+0.16
Very10.031%+0.17
Pulls toward
Where a test would settle if every vote were this one, from average voters (lean 5).
Counts for
How much the vote weighs in the average. 100% is a full vote.
Harsh vs generous voter
How many points higher a typical 20-vote test scores when one of these voters is harsh (lean 8) instead of generous (lean 2).
  • In this fit, Very pulls hardest toward 10 but counts for 31 to 33% of a full vote, and a Yes for 49 to 54%. No and Somewhat have weights of 74 to 100% depending on the trait.
  • Somewhat pulls toward the middle of the scale. On a typical 20-vote Attractive test scoring 6.9, one more vote changes the score by: No −0.21, Somewhat −0.09, Yes +0.09, Very +0.24.
  • Twenty Yes votes from average voters give 8.8 to 8.9, depending on the trait, so Yes votes alone top out near 9. Getting clearly past 9 takes some Very votes, or Yes votes from harsh voters.
  • Swapping one generous voter (lean 2) for a harsh one (lean 8) adds 0.13 to 0.19 points to a typical test, depending on the trait and button. The effect depends on both the lean adjustment and the vote's weight.
  • No votes come from harsher voters. In our data the average lean behind a No is about 6. Behind a Very it's about 4 on Attractive and Trustworthy, and 5 on Smart.

Same votes, different scores

4 tests in our data got exactly the same Attractive votes: 10 Somewhat, 9 Yes and 1 Very. They scored 6.75, 6.92, 7.30, and 9.05. Voter lean helps explain the gap: on the 9.05 photo, the Yes and Somewhat voters averaged a lean of about 9. Given the same votes and leans, our formula puts those tests at 6.8, 7.1, 7.3, and 8.8.

The same thing happens with eight Yes votes on Attractive, once from average voters and once from harsh ones:

Voter leans: 4, 5, 5, 5, 4, 6, 5, 4

Average voters (mean lean 4.8). On their own these eight votes give 8.6.

Voter leans: 8, 9, 7, 10, 8, 9, 8, 9

Harsh voters (mean lean 8.5) who rarely click Yes. The same eight votes give 9.5.

Why a high Smart score is easier than a high Attractive one

The three traits don't spread out the same way. Across the 760 tests in our data, this share scored 9.0 or higher:

31.1%Smartaverage 7.36
16.4%Trustworthyaverage 7.32
4.9%Attractiveaverage 6.85

So in our data a 9+ on Smart is 6.4 times as common as a 9+ on Attractive. Across all of Photofeeler a 9.0 means "Top 10%" on every trait, but our photos aren't a random sample. They're all men aged 24 to 42 from our own account, rated mostly by women, and on them Smart and Trustworthy clear 9.0 more often than 1 in 10 while Attractive clears it less often. These are counts of tests, which can include repeated photos. Other groups may score differently.

Smart now has the highest average and the most 9+ results: 236 tests, compared with 105 below 5. Our guess is that put-together cues like a fitted blazer or a clean background help, but this comparison alone cannot tell us what caused the scores.

Trustworthy has a median of 7.51, but fewer 9+ scores than Smart. We think top Trustworthy scores come from warmth, like real eye contact and a natural smile, which an outfit change alone won't fix. "Would prefer direct eye contact" and "Would prefer if they were smiling more" are two of the most common Quick Notes in our data.

The hardest trait to push past 9 is Attractive. It probably depends partly on things you can't change on the day, like face and build, and partly on things you can (light, grooming, clothes), so gains tend to come from several small fixes together.

The traits also move together, but unevenly. Among the 166 tests with Attractive at 8.0 or higher, Smart averaged 9.02, versus 6.89 for the rest. The Trustworthy averages were 8.14 and 7.08. Higher Attractive scores go with higher scores on both other traits, with a larger gap for Smart.

The formula, step by step

For anyone who wants the math. This is exactly what the calculator above runs.

  1. 1Each vote gets a value

    vjv_j is the button voter jj clicked and LjL_j is their lean. AA is the button's value from an average voter; BB is how far each point of lean above or below 5 moves it.

    sj=A[vj]+B[vj] (Lj−5)s_j = A[v_j] + B[v_j]\,(L_j - 5)
  2. 2Each vote gets a weight

    Φ\Phi is the bell curve's running total: it turns any number into a share between 0 and 1. W0W_0 is fitted per button, so the weight depends only on which button was clicked. Photofeeler's real weights are per voter; this is our stand-in.

    wj=Φ(W0[vj])w_j = \Phi\big(W_0[v_j]\big)
  3. 3Take the weighted average

    zz averages the vote values, each counted by its weight, plus a starting point of P=1.53P = 1.53 votes at M=0.30M = 0.30 (a score of 6.2).

    z=∑jwj sj+P M∑jwj+Pz = \dfrac{\sum_j w_j\, s_j + P\,M}{\sum_j w_j + P}
  4. 4Put it on the 0–10 scale

    The same Φ\Phi turns zz into a share of photos, times 10. z=0z = 0 lands at 5.0, and scores flatten out near 0 and 10.

    score=10⋅Φ(z)\text{score} = 10\cdot\Phi(z)
  5. 5Add the range

    σ\sigma sets the range width after nn votes. VV measures disagreement between buttons: cvc_v is the count and svs_v is the fitted value at that button's mean lean. More disagreement widens the range. We fit its ends to Photofeeler's outer reported values. For the starting 20-vote Attractive example, the estimated 6.9 score ranges from 5.7 to 8.2.

    sˉ=∑vcvwvsv∑vcvwv,V=∑vcvwv(sv−sˉ)2∑vcvwvσ=e1.07 z+0.677 Vn+1.975low=10⋅Φ(z−0.970 σ)high=10⋅Φ(z+1.249 σ)\begin{gathered}\bar s = \frac{\sum_v c_v w_v s_v}{\sum_v c_v w_v},\quad V = \frac{\sum_v c_v w_v(s_v-\bar s)^2}{\sum_v c_v w_v} \\[4pt] \sigma = \sqrt{\frac{e^{1.07\,z} + 0.677\,V}{n + 1.975}} \\[4pt] \text{low} = 10\cdot\Phi(z - 0.970\,\sigma) \\[2pt] \text{high} = 10\cdot\Phi(z + 1.249\,\sigma)\end{gathered}

How we found the numbers

We fitted AA, BB and W0W_0 for each trait, plus the starting point, on 760 Dating tests. Together they hold 12,569 votes, and each vote rates all three traits, so 37,707 ratings in total. An optimizer minimized squared score errors, giving each test's three scores equal weight. A second fit matched the outer endpoints of Photofeeler's reported ranges.

On the fitting data, the formula is off by 0.11 points on average. It's within a quarter point of Photofeeler's score 91% of the time, and its worst miss is 0.8. In five validation rounds, keeping entire activation weeks out of the fit, average score error was 0.12 and range-end error was 0.13. Weeks help keep nearby tests together, but we don't have photo or shoot IDs to separate every related test.

These are fitted approximations. Very's value AA is fixed at 4.0 on the formula's internal scale, which already works out to a 10.0; the data doesn't uniquely determine each button's value and weight. The range accounts for disagreement between buttons, but uses only the average lean within each button, so it misses some voter variation. Photofeeler doesn't publish its formula. Its 2019 research paper says real vote weights are set per voter, by how predictable that voter is.

All fitted constants
ButtonAABBW0W_0
Attractive
No-0.7810.1200.765
Somewhat0.0320.1430.632
Yes1.3800.1980.108
Very4.0000.367-0.508
Smart
No-0.8470.0952.220
Somewhat-0.1370.1292.367
Yes1.3120.238-0.003
Very4.0000.403-0.445
Trustworthy
No-0.7990.0863.827
Somewhat-0.1080.1401.486
Yes1.3160.238-0.035
Very4.0000.305-0.487

Shared by all three traits: the starting point P=1.528P = 1.528 votes at M=0.3M = 0.3, and the range constants in step 5.

What's in a Photofeeler test record

Behind every result page is a JSON record with the photo, your test settings, the full vote breakdown and the notes voters left. Most of it shows up on screen in some form.

The test

activatedAtunix timestamp

Seconds since 1 January 1970 (UTC) when the test went live. Multiply by 1000 for JavaScript's Date.

voteCountnumber

How many votes the test has collected so far.

requiredVoteCountnumber

How many votes you ordered. The test stays open, and the scores keep moving, until it gets them.

isKarmaPoweredboolean

true for a free Karma test, earned by voting on other people's photos (no guaranteed vote count). false for a test paid with purchased Credits. Every test in our data used Credits.

The scores

ratingsByTraitobject

The headline 0–10 score for each trait: SMART, TRUSTWORTHY and ATTRACTIVE for Dating. It's the middle of the range Photofeeler estimates from your votes, the same number shown at the top of the result page.

quantilesByTraitobject

Five points along each trait's estimated range. The middle one matches the headline score, and we fit the first and last as the range endpoints. Photofeeler doesn't document the exact percentile probabilities in this export; interpreting them as the 10th, 30th, 50th, 70th and 90th is an assumption, not a verified part of its formula.

The votes

scoreTalliesByTraitobject

How many voters clicked each button, per trait, in the order [No, Somewhat, Yes, Very]. [3, 6, 9, 2] on Attractive means 3 No, 6 Somewhat, 9 Yes and 2 Very.

scoreLeansByTraitobject

One lean per voter, grouped by the button they clicked (same order), so the four lists hold voteCount leans in total. A lean is how harsh that voter usually is on this trait, from 0 (generous) to 10 (harsh). The example above shows how much leans move a score.

noteGroupsarray of objects

The notes voters left, grouped by text. Each entry has text (e.g. "Great smile!"), count (how many voters picked it) and sentiment: 1 for a positive Quick Note, -1 for a negative one and 0 for a free-text comment.