> ## Documentation Index
> Fetch the complete documentation index at: https://docs.creditbenchmark.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Navnematching og CBID-kartlegging

> Credit Benchmark løser firmanavn i fri tekst til CBID-er ved hjelp av en tretrinns prosess: henting av kandidater, feature engineering og ML-basert match-scoring.

Hver inndata returnerer rangerte treff med en konfidensscore mellom 0 og 1.

<div style={{display: 'flex', alignItems: 'stretch', padding: '32px 24px', background: 'transparent', gap: '0', fontFamily: 'inherit', fontSize: '12px'}}>
  <div style={{flexShrink: 0, display: 'flex', flexDirection: 'column', justifyContent: 'center', minWidth: '130px'}}>
    <div style={{position: 'relative', marginLeft: '24px', marginBottom: '24px'}}>
      <div style={{position: 'absolute', inset: 0, transform: 'translate(-24px, 24px)', border: '1px solid rgba(51,65,85,0.22)', background: 'transparent'}} />

      <div style={{position: 'absolute', inset: 0, transform: 'translate(-12px, 12px)', border: '1px solid rgba(51,65,85,0.3)', background: 'transparent'}} />

      <div style={{position: 'relative', zIndex: 1, border: '1.5px solid #334155', background: '#1e293b', color: '#f8fafc', padding: '12px 14px'}}>
        <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase', marginBottom: '8px', borderBottom: '1px solid rgba(255,255,255,0.1)', paddingBottom: '6px'}}>Enhet</div>

        <div style={{fontSize: '10px', lineHeight: '1.9', color: '#94a3b8', fontFamily: 'monospace'}}>
          <div><span style={{color: '#7dd3fc'}}>entity\_name</span></div>
          <div><span style={{color: '#86efac'}}>land</span> <span style={{color: '#94a3b8'}}>(opt)</span></div>
          <div><span style={{color: '#86efac'}}>bransje</span> <span style={{color: '#94a3b8'}}>(opt)</span></div>
          <div><span style={{color: '#86efac'}}>LEI</span> <span style={{color: '#94a3b8'}}>(opt)</span></div>
        </div>
      </div>
    </div>
  </div>

  <div style={{flexShrink: 0, display: 'flex', alignItems: 'center', padding: '0 10px'}}>
    <div style={{width: '20px', height: '1.5px', background: '#94a3b8'}} />

    <div style={{width: 0, height: 0, borderTop: '4px solid transparent', borderBottom: '4px solid transparent', borderLeft: '6px solid #94a3b8'}} />
  </div>

  <div style={{flex: 1, display: 'flex', flexDirection: 'column', gap: '16px'}}>
    {/* Trinn 1: Henting av kandidater */}

    <div style={{border: '1px solid #e2e8f0'}}>
      <div style={{background: '#1e3a8a', color: '#f8fafc', padding: '10px 14px'}}>
        <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase'}}>1 — Henting av kandidatenheter</div>
      </div>

      <div style={{padding: '8px 14px', background: 'transparent', fontSize: '11px', lineHeight: '1.6'}}>
        <div>Søker i CB-enhetsdatabasen etter sannsynlige kandidater</div>
      </div>
    </div>

    {/* Trinn 2: Feature Engineering */}

    <div style={{border: '1px solid #e2e8f0'}}>
      <div style={{background: '#1e40af', color: '#f8fafc', padding: '10px 14px'}}>
        <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase'}}>2 — Feature Engineering</div>
      </div>

      <div style={{padding: '8px 14px', background: 'transparent', fontSize: '11px', lineHeight: '1.6'}}>
        <div>Måler navnelikhet og samsvar mellom metadata per kandidat</div>
      </div>
    </div>

    {/* Trinn 3: ML-poengberegning */}

    <div style={{border: '1px solid #e2e8f0'}}>
      <div style={{background: '#4c1d95', color: '#f8fafc', padding: '10px 14px'}}>
        <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase'}}>3 — ML-poengsum</div>
      </div>

      <div style={{padding: '8px 14px', background: 'transparent', fontSize: '11px', lineHeight: '1.6'}}>
        <div>Gir hver kandidat en poengsum som sannsynlighet for treff</div>
      </div>
    </div>
  </div>

  <div style={{flexShrink: 0, display: 'flex', alignItems: 'center', padding: '0 10px'}}>
    <div style={{width: '20px', height: '1.5px', background: '#94a3b8'}} />

    <div style={{width: 0, height: 0, borderTop: '4px solid transparent', borderBottom: '4px solid transparent', borderLeft: '6px solid #94a3b8'}} />
  </div>

  <div style={{flexShrink: 0, display: 'flex', flexDirection: 'column', justifyContent: 'center', minWidth: '130px'}}>
    <div style={{position: 'relative', marginLeft: '24px', marginBottom: '24px'}}>
      <div style={{position: 'absolute', inset: 0, transform: 'translate(-24px, 24px)', border: '1px solid rgba(51,65,85,0.22)', background: 'transparent'}} />

      <div style={{position: 'absolute', inset: 0, transform: 'translate(-12px, 12px)', border: '1px solid rgba(51,65,85,0.3)', background: 'transparent'}} />

      <div style={{position: 'relative', zIndex: 1, border: '1.5px solid #334155', background: '#1e293b', color: '#f8fafc', padding: '12px 14px'}}>
        <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase', marginBottom: '8px', borderBottom: '1px solid rgba(255,255,255,0.1)', paddingBottom: '6px'}}>Topp-resultat</div>

        <div style={{fontSize: '10px', lineHeight: '1.9', color: '#94a3b8', fontFamily: 'monospace'}}>
          <div><span style={{color: '#7dd3fc'}}>CBId</span></div>
          <div><span style={{color: '#7dd3fc'}}>CBEntityName</span></div>
          <div><span style={{color: '#fbbf24'}}>sikkerhet</span></div>
          <div><span style={{color: '#94a3b8'}}>rangering</span></div>
        </div>
      </div>
    </div>
  </div>
</div>

Denne flyten viser den komplette løsningsarbeidsflyten fra inndataentitetsfelt til rangerte kandidatresultater.

## Pipeline

### Henting av kandidatenheter

CB Entity Database støtter omtrentlig tekstsøk og returnerer en kortliste med plausible kandidater. Søket bruker «[BM25-rangering](https://en.wikipedia.org/wiki/Okapi_BM25)» – som rangerer kandidater etter termfrekvens og invers dokumentfrekvens – og normaliserer inndatateksten for å håndtere tegnsetting, aksenter, lovlige suffikser og vanlige navnevarianter.

Omtrent 20 kandidater hentes per navn. Dette trinnet prioriterer «[gjenfinningsgrad fremfor presisjon](https://en.wikipedia.org/wiki/Precision_and_recall)»: den riktige treffet må vises i kandidatsettet før poengberegningen kan begynne.

### Feature Engineering

For hver kandidat, en funksjonsvektor $\mathbf{x}$ er bygget opp av dusinvis av individuelle signaler, gruppert i 4 kategorier:

| Kategori               | Eksempler                                                                                                                                                                                                  |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Strenglikhet**       | [Jaccard](https://en.wikipedia.org/wiki/Jaccard_index) token-overlapping, [Levenshtein](https://en.wikipedia.org/wiki/Levenshtein_distance) avstand, [n-gram](https://en.wikipedia.org/wiki/N-gram) likhet |
| **Søkerelevans**       | [BM25](https://en.wikipedia.org/wiki/Okapi_BM25) poengsum og rangering fra hentingsfasen                                                                                                                   |
| **Tekstnormalisering** | Sammenligning etter fjerning av tegnsetting, aksenter, juridiske suffikser og navnevarianter                                                                                                               |
| **Metadatajustering**  | Konsistens mellom land, sektor og identifikator (LEI) mellom inndata og kandidat                                                                                                                           |

### ML-poengsum

En maskinlæringsklassifikator tildeler en samsvarssannsynlighet til hver kandidat uavhengig:

$$
\hat{p} = P(\text{match} \mid \mathbf{x})
$$

Kandidatene rangeres etter $\hat{p}$ og de øverste resultatene som returneres i svaret.

#### Opplæring

Modellen er trent på et internt datasett med titusenvis av merkede entitetsmatcher — hver et par med enten riktig eller feil match. Dette skiller seg fra selve CB Entity Database, som inneholder millioner av poster som tilsvarer observerte enheter fra [bankinnleveringer](/methodology/data-processing/data-submission). Modellen trenes på nytt hver uke etter hvert som både CB Entity Database og universet for entitetsoppløsning vokser.

#### Testing

Ytelsen evalueres ved hjelp av «[k-fold kryssvalidering](https://en.wikipedia.org/wiki/Cross-validation_\(statistics\)»), noe som sikrer at målingene gjenspeiler generalisering over hele det merkede datasettet, snarere enn en enkelt oppdelings- og testdel. Ettersom modellen omskoleres på nye data, blir ytelsen revurdert hver syklus. Klassifiseringsmålinger rapporteres på siden «[Accuracy & Coverage](/api-reference/matching/performance)».

## Konfidensscore

Hver kandidat returneres med en poengsum $\hat{p} \in [0, 1]$ som gjenspeiler modellens sikkerhet for at det er det riktige treffet.

Internt bruker vi følgende bånd som veiledning, basert på ytelse målt på **testdataene** våre:

| Område            | Signal           | Treffrate  | Begrunnelse                                                                                                                      |
| ----------------- | ---------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------- |
| *p > 0,6*         | Sterk treff      | **94.4%**  | Høy nok sikkerhet til å behandle som et treff uten manuell gjennomgang                                                           |
| *p i \[0.3, 0.6]* | Sannsynlig treff | **\~65 %** | Modellen anser et treff som sannsynlig, men ikke sikkert — poengsummer i dette området krever gjennomgang før de godtas          |
| *p \< 0,3*        | Svakt            | **\~35 %** | Det er mindre sannsynlig at kandidaten er det riktige treffet — vises vanligvis bare for å bekrefte at det ikke finnes noe treff |

Disse tallene gjenspeiler trefffrekvensen **per kandidat**. Når flere kandidater returneres (`limit > 1`) med lavere poengsum, kan den riktige enheten fortsatt være til stede et sted i resultatsettet — å gjennomgå de beste kandidatene samlet øker sjansen for en korrekt identifisering, selv når ingen enkelt poengsum er høy.

Se «[Enhetsoppløsning: Accuracy & Coverage](/api-reference/matching/performance)» for en fullstendig analyse av avveiningen mellom terskelverdier.
