<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[US Directory]]></title><description><![CDATA[US Directory]]></description><link>https://usdorg.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ae3b2411c598d533fa4dbd1/084adefd-ef9c-4187-8bed-b1c3b64b5780.png</url><title>US Directory</title><link>https://usdorg.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 04 Nov 2026 08:20:16 GMT</lastBuildDate><atom:link href="https://usdorg.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The scoring math behind US Directory, in five formulas]]></title><description><![CDATA[Diminishing returns, decaying penalties, Wilson bounds and a stability test for rankings]]></description><link>https://usdorg.hashnode.dev/the-scoring-math-behind-us-directory-in-five-formulas</link><guid isPermaLink="true">https://usdorg.hashnode.dev/the-scoring-math-behind-us-directory-in-five-formulas</guid><category><![CDATA[data]]></category><category><![CDATA[algorithms]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[US Directory]]></dc:creator><pubDate>Thu, 29 Oct 2026 20:55:53 GMT</pubDate><content:encoded><![CDATA[<p>US Directory publishes the method it uses to describe local service businesses from public records. Release 3.0 made the weights and formulas public, and a machine-readable copy lives in an open repository. Here is a short tour of the math.</p>
<h2>1. Diminishing returns for counts</h2>
<p>Years in business, certifications, posted prices and similar counts share one shape:</p>
<pre><code>log_cap(x, cap) = min(1, ln(1 + x) / ln(1 + cap))
</code></pre>
<p>With a cap of 25 years, 5 years give about 0.55 and 10 years about 0.74. The first units matter most, and the value never exceeds 1.</p>
<h2>2. Penalties that fade with time</h2>
<p>Disciplinary events use one formula for every event type:</p>
<pre><code>value = exp(-sum(severity * exp(-age_years / tau)) / scale), scale = 50, tau = 3
</code></pre>
<p>No events give 1. Events older than seven years are ignored.</p>
<h2>3. Proportions from small samples</h2>
<p>Shares such as passed final inspections are taken at their Wilson lower bound at 90% confidence, and shares built on fewer than ten observations stay unscored. Small samples cannot produce a perfect value by luck.</p>
<h2>4. A score that decomposes exactly</h2>
<pre><code>score = 100 * sum(weight * value) / sum(weight)
</code></pre>
<p>Both sums run over the factors that could be checked. Each factor's contribution is 100 * weight * value / sum(weight), so the contributions add up exactly to the score, and every point can be traced to one factor.</p>
<h2>5. Confidence, separate from the score</h2>
<p>Confidence weighs how much was checked and how strong the evidence is (agency records count 1.0, site statements less), multiplied by a term that rewards independent source families. A poor license match lowers confidence but leaves the score unchanged.</p>
<h2>A stability test before ranks appear</h2>
<p>Rank numbers are shown only when the leading scores are spread out enough and stay put when the weights are randomly redrawn 500 times. Otherwise results are shown in tiers without numbers.</p>
<p>The full methodology is available at <a href="https://usd.org/methodology/">usd.org</a>.</p>
<p><a href="https://usd.org/">US Directory</a></p>
]]></content:encoded></item></channel></rss>