I would start by looking for occupations with similar work activities. Before recommending a training path, I would compare their detailed tasks and check the knowledge and experience requirements. If two occupations look similar only after I group their activities under broad labels, I would revisit that match. A distance between activity profiles gives me a place to investigate, not an estimate of training time.
For an AI-exposure assessment, I would use the detailed activities to decide what to test under the conditions the job requires. Recording a patient's medical history and recording production data both fall under O*NET's "Documenting/Recording Information" category. Evidence that a system can work with production records would not establish that it can handle patient histories. Keeping the activities separate lets me test that difference before assigning them the same exposure.
In a new onet2r article, I compare linked work activities across 923 occupations and measure what is lost when detailed descriptions are grouped. The analysis lets me check which job comparisons depend on broad labels or a particular set of occupation weights. I can review those comparisons before they become the basis for a training recommendation or an AI-exposure claim.
Start with activities that occupations can share
O*NET is the US Department of Labor's database of occupational requirements. I used its May 2026 release, version 30.3. The analysis covers 923 occupations with 18,796 task statements linked to 2,083 Detailed Work Activities. Another 93 entries in the occupation taxonomy fall outside this task-based sample. I leave them unscored.
No Task ID is shared across occupations in this archive. A rarity score built directly on those IDs would give every task the same weight, even when two task statements describe similar work.
I use O*NET's links from task statements to Detailed Work Activities to compare occupations using the same vocabulary. I count an activity as present if at least one task in an occupation links to it. Repeated links count once. Every covered occupation gets equal weight, and the baseline includes Supplemental as well as Core tasks.
The most common detailed activity is "Record operational or production data." It appears in 91 occupations, about 9.9% of the sample. At the other end, 57 detailed activities appear in just one occupation each. These are specific descriptions, so even the most common label reaches only a small share of occupations. Those percentages describe occupation codes, not workers or working hours. I have not applied employment weights to the results shown here.
Even the most common detailed activity appears in fewer than 10% of occupations
The four most widely linked detailed activities among 923 occupations in O*NET 30.3. Each bar track spans 0% to 10%.
The employment data are available through onet2r. The package imports the Bureau of Labor Statistics' Occupational Employment and Wage Statistics (OEWS) estimates and can turn them into employment-weight panels. I could use those weights to estimate the share of covered employment in occupations linked to an activity, or to give more weight to larger occupations when calculating activity prevalence. Neither calculation would tell me how much time workers spend on that activity or how many would be affected by AI.
OEWS and O*NET also use different levels of occupational detail. The package's OEWS bridge handles published combined codes, but OEWS does not supply employment splits among all O*NET detail codes. For an employment-weighted extension, I would state the estimate year and mapping assumptions, and report how much employment the matched occupations cover. The equal-code and equal-family comparisons below answer a different question about the activity descriptions themselves.
Rarity and isolation give different answers
TF-IDF is usually used to find words that help distinguish documents. Here, an occupation takes the place of a document and an activity takes the place of a word. An activity gets more weight when fewer occupations share it. I average those rarity weights within each occupation, giving each linked activity equal weight.
Slaughterers and Meat Packers ranks first on this score. It has five linked activities, tied with five other occupations for the smallest profile. All 14 of its task statements are classified as Supplemental, with none Core.
If I keep only Core tasks, that occupation drops out and the sample shrinks from 923 occupations to 893. Comparing those rankings would require accounting for the occupations lost, as well as the tasks removed from the remaining profiles.
I also compare each occupation with its closest activity-profile neighbor, using total variation distance between their activity shares. This distance runs from zero for identical shares to one for profiles with no shared activities. Models has the greatest distance from its closest neighbor, although it ranks 23rd on activity rarity. Slaughterers and Meat Packers ranks first on rarity but has a closer neighbor.
Giving each represented SOC minor group (a family of related occupation codes) equal influence on activity prevalence changes the ranking substantially. Compared with the baseline, which weights each detailed occupation code equally, the rank correlation is 0.59. Only two occupations overlap between the two top-ten sets when ties are included. I changed the weights used to define rarity, keeping every occupation's activity profile fixed.
For a ranking used to set priorities, I would rerun the comparison with both equal-code and equal-family weights. A change in which occupations make the shortlist would be part of the result I report.
The scores describe activity rarity within this database sample. Economic value, difficulty, and exposure to AI would each require separate evidence.
What broader labels discard
O*NET groups its detailed activities into intermediate and generalized activities. I use that hierarchy to calculate how much information about occupation identity survives at each level.
For this calculation, I give each of the 923 occupations an equal probability of being picked, then give each of its linked detailed activities an equal probability. I measure how much knowing the activity reduces uncertainty about which occupation was picked, in bits. I repeat the calculation after replacing detailed labels with their published parent groups, keeping the original activity weights fixed.
Generalized labels retain 26% of detailed-activity information
Information about occupation identity retained at each activity level. O*NET 30.3, 923 equally weighted occupations.
Show the values behind the figure
| Activity labels | Labels used | Bits | Retained |
|---|---|---|---|
| Detailed | 2,083 | 6.39 | 100% |
| Intermediate | 332 | 3.95 | 61.9% |
| Generalized | 41 | 1.67 | 26.1% |
The generalized labels retain about a quarter of the information carried by the detailed labels under this calculation. That is not a claim that they describe only a quarter of a job, or that a classifier would be right a quarter of the time.
Grouping labels this way guarantees some information loss. In the full article, I calculate the loss attributable to each published activity group. I also compare the hierarchy with 200 random groupings that preserve group sizes. The published generalized grouping retains more information than any of those random assignments. This comparison holds group sizes fixed, but does not establish that the hierarchy is optimal.
I changed the activity labels while holding the occupation profiles fixed. The loss of information therefore reflects the grouping procedure. It provides no evidence that the work in these occupations has become more similar over time.
Check what the measure is picking up
The detailed activity profiles are sparse. About 87.3% of all occupation pairs share no detailed activity. A distance averaged across all pairs therefore starts close to its maximum, which makes a high number easy to overread.
I checked that result by shuffling activities while preserving both the number of activities in each occupation and how many occupations share each activity. The observed mean pairwise distance is about 0.987. Across 20 finite-run reference shuffles, it is about 0.986. The small absolute difference gives little reason to interpret the high observed average as strong evidence of separation on its own.
The observed median distance to the nearest profile is about 0.59, compared with about 0.86 in those shuffles. Actual profiles have closer neighbors than the shuffled bundles in this comparison. These finite runs are not certified uniform samples, and their range is not a confidence interval. I use them to examine the behavior of the distance measure, without treating the comparison as a statistical test of how the labor market is organized.
Skills and experience need their own treatment
The archive results above concern linked work activities. The article's examples for skills, knowledge, and experience are invented demonstrations of methods. They do not establish which real occupation has the most distinctive experience requirements.
A presence-only measure can miss differences in a descriptor that nearly every occupation has. If every occupation has a positive reading requirement, binary rarity gives reading zero weight, even when required levels differ. I would need the original ratings to examine those differences.
O*NET's experience response percentages describe reported requirements, not the actual tenure of people working in an occupation. To compare those requirements, I would retain the response distributions and their category definitions. Reading category codes as years would give the values a meaning they do not have.
The activity inventory supplies no evidence about what an AI system can do. It also omits specialist knowledge that could affect how difficult an activity is to learn or perform.
Read and reproduce the analysis
The full article includes the figures, formulas, and sensitivity comparisons. Its pinned source and snapshot tables record the source archive's SHA-256 and the rules used to construct the sample. The article builds from bundled tables without an API key or a network connection.
The task records in this release span 2004 to 2025, so the snapshot combines measurements from different years. Before using its rarity rankings to make claims about specialization, I would need to examine their dependence on Core-task coverage and profile size. Changing the occupation weights has already changed which occupations rank highest.
Data attribution
This post uses modified information from the O*NET 30.3 Database, US Department of Labor, Employment and Training Administration (USDOL/ETA), under CC BY 4.0. The public archive was used to calculate activity prevalence, profile distances, and information retained under grouping. USDOL/ETA has not approved, endorsed, or tested these modifications. O*NET is a trademark of USDOL/ETA.