How recommendations take shape

TrackMoose combines similarity signals from every artist in a search, rewards candidates supported by more seeds, and explains the result as a ranked score. This page documents the live method, including its limits.

The short version

Each seed opens one trail. TrackMoose merges those trails, then ranks artists by both signal strength and how many explicit seeds point to them.

Seed artists
    |
cached similarity lists
    |
case-insensitive candidate merge
    |
weighted average x seed coverage
    |
exclusions, tags, ranked results

From seeds to candidates

Cache before fetching

Similarity lists and tags are stored by normalized, lowercase artist name. A non-empty list can be reused for up to 90 days. After that, the next request tries to refresh it. A successful refresh also asks the related public artist page to update.

Merge without multiplying duplicates

TrackMoose takes up to 50 similar artists from each seed list. Candidate names are merged case-insensitively, while every seed-to-candidate score is retained for the calculation. The same candidate can therefore receive support from several seeds without appearing as several results.

Optional followed-artist signal

For signed-in listeners, up to 20 followed artists can add a secondary signal. Each of those matches carries one quarter of the weight of an explicit seed match. Explicit seeds alone determine coverage, so the artists chosen for the current search stay in control.

The score formula

Strong individual similarity matters. Agreement across several explicit seeds matters too.

weighted average =
(explicit score sum + followed score sum x 0.25)
/ (explicit match count + followed match count x 0.25)

coverage = ln(1 + explicit match count)
/ ln(1 + explicit seed count)

TrackMoose score = weighted average x coverage x 100

The final value is rounded to one decimal place. It is a search-specific ranking score, not a percentile, popularity measure, or probability that someone will like the artist.

Worked example: support beats one isolated match

Imagine a search with two explicit seeds. No followed-artist signal is included in this example.

Candidate A

Similarity 0.8 from seed one and 0.6 from seed two.

average = (0.8 + 0.6) / 2 = 0.7

coverage = ln(3) / ln(3) = 1

score = 0.7 x 1 x 100 = 70.0%

Candidate B

Similarity 0.9 from seed one, with no match from seed two.

average = 0.9

coverage = ln(2) / ln(3) = 0.631

score = 0.9 x 0.631 x 100 = 56.8%

Candidate B has the strongest single connection, but Candidate A ranks higher because both seeds support it. The logarithmic coverage term rewards agreement without making single-seed discoveries disappear.

Tags and exclusions

Up to three usable tags are cached for an artist after known junk labels and a tag identical to the artist name are removed. Results display the first available cached tag. Some results have no tag.

Explicit seeds are never recommended back to the listener. Signed-in searches also exclude followed and ignored artists. Candidate names are compared case-insensitively for these checks.

Sparse data behavior

A seed with no usable similarity list contributes no candidates and is reported as not found in the search response. Other seeds can still produce a ranking. If every seed is sparse or a refresh fails, the result can be short or empty.

A failed refresh returns an empty list for that request. TrackMoose does not invent substitute artists or turn missing data into a confident recommendation.

Automation and review

Searches, scores, tags, and generated similar-artist pages are automated. They are not individually selected, written, or approved by a human before appearing. Cache refreshes are also automatic.

Editorial guides and genre case studies receive manual review only when the page visibly names a reviewer and shows a reviewed date. A page without those markers should not be read as human curation.

This methodology page is manually checked against the current implementation. When the recommendation code changes, this page should change with it.

Known limitations and biases

  1. 01

    Similarity data reflects listening patterns and tagging behavior. Popular artists and well-documented scenes can have denser signals than new, local, or niche artists.

  2. 02

    Artist names are matched case-insensitively. Name changes, aliases, shared names, and spelling differences can split or combine signals imperfectly.

  3. 03

    Tags come from listener-created data. They can be broad, dated, inconsistent, or missing even after low-value labels are filtered out.

  4. 04

    A high score means strong agreement within this search. It is not a prediction that every listener will like the artist, and scores from separate searches are not directly comparable.

Test the method yourself

Try the same seed list twice, change one artist, and compare which recommendations move.