Tag Synonym Statistics at Top Network Sites
To analyze this, I used the Stack Exchange Data Explorer to classify tag synonym suggestions into three categories: approved by vote (approved with score >= 4), approved by mods (approved with score < 4), and pending. As far as I can tell the data explorer doesn't include information about tag synonyms that were rejected.
Here are the results for the top 11 Stack Exchange sites (by question count):
Site Mods Vote Pending
Stack Overflow 1602 804 750
Mathematics 164 17 12
Super User 770 1 1
Server Fault 296 25 2
Ask Ubuntu 273 3 5
TeX - LaTeX 149 9 5
Meta Stack Exchange 303 18 1
Unix and Linux 117 1 7
Stack Overflow на русском 91 3 4
Math Overflow 54 1 3
Statistical Analysis 151 0 2
Total 3970 882 792
In summary, tag synonyms do get approved by vote, though not as often as they get approved by mods. 33% of the synonyms on Stack Overflow were approved by vote, and only 3% of the synonyms on the remaining sites were approved by vote.
Among the pending flags on Stack Overflow (the only site with more than a handful), there are 50 with score -1, 449 with score 0, 134 with score 1, 81 with score 2, and 36 with score 3.
Why Don't More People Vote on Tag Synonyms?
I think the high rate of approval by mods is because folks go straight to meta with their synonyms, perceiving that their proposal will otherwise languish in the proposed tag synonyms list. It has certainly been my experience that tag synonyms languish in review, and jmac estimated that on average pending synonyms have been around for nearly half a year. Why not go straight to the mods if you have to wait half a year or more for approval?
I see two hypotheses for why people don't vote on tag synonyms -- they either don't have a high enough answer score in the tag or they do but still choose not to vote for any number of reasons (UI makes it hard to find the voting page, voting is not properly incentivized by badges, etc.). To explore the degree to which these two factors play a role, I've broken down the number of users able to vote on each of the 612 target tags for the 750 current pending tag synonyms on Stack Overflow (note the log scale on the x-axis):
For 8% of pending synonyms, there is no hope of approval because there aren't four eligible voters on the site. 14% of pending synonyms have 10 or fewer potential voters, so they aren't likely to get approved by vote. On the other hand, many pending synonyms have a large number of potential voters -- 47% have at least 100 potential voters and 8% have at least 1,000 potential voters.
Potential Fixes to the Tag Synonym System
The fact that there are 750 pending tag synonyms on Stack Overflow and that 97% of the synonym approvals on the next 10 highest ranked Stack Exchange sites (by number of questions) are done by mods suggests that the tag synonym voting system leaves much to be desired. I think the least controversial way to deal with the issue would be to get more eligible voters to actually vote on synonyms. Many good proposals already exist on meta for doing this:
- Create a badge for voting on tag synonyms, as proposed here. The "go get it" link from a user's profile page could link to the list of tag synonym proposals that the user can vote on.
- Create a tag synonym review queue, as proposed here. The badges that exist for all review queues could be applied to incentivize voting.
- User interface improvements such as notifications for tag synonyms you can vote on and a link to pending synonyms when browsing a tag, as proposed here.
Within the Stack Exchange Data Explorer, I used the following query to break down tag synonyms by type:
SELECT a.type, COUNT(*) FROM
CASE WHEN ApprovalDate is NULL THEN 'Pending' ELSE NULL END,
CASE WHEN Score >= 4 THEN 'Vote' ELSE 'Mods' END
) AS type FROM TagSynonyms) AS a
GROUP BY a.type;
I got the breakdown of pending flags on Stack Overflow with:
SELECT Score, COUNT(*)
WHERE ApprovalDate is NULL
GROUP BY Score;
To get information on the number of folks who can vote on each target tag, I used:
SELECT tagScores.tn, COUNT(*) FROM
(SELECT target.tn, a.OwnerUserId, SUM(a.Score) AS scoreSum FROM
(SELECT DISTINCT(TargetTagName) AS tn
WHERE ApprovalDate is NULL
) AS target
INNER JOIN Tags AS t ON target.tn=t.TagName
INNER JOIN PostTags AS pt ON t.Id=pt.TagId
INNER JOIN Posts AS q ON pt.PostId=q.Id
INNER JOIN Posts AS a ON q.Id=a.ParentId
GROUP BY target.tn, a.OwnerUserId
) AS tagScores
WHERE tagScores.scoreSum >= 5
GROUP BY tagScores.tn;