Background Mobile

Cold Start Without a Social Graph

artificial intelligence/
September 17, 2026
Cold Start Without a Social Graph

Building a recommendation or social product without existing user data is one of the harder engineering problems in applied ML. Here is how to approach it without faking it.

What Makes the Cold Start Problem Hard in Practice

Most cold start literature assumes you have some data: a few ratings, a signup form, an email domain. The real problem is the zero-state: a new user lands, you know nothing, and you have roughly 30 seconds before they leave.

The cold start problem has three distinct sub-problems that are often conflated:

  • New user cold start: No interaction history for this user.
  • New item cold start: A piece of content or product just added with no engagement data.
  • New system cold start: The entire platform is new, so there is no social graph at all.

All three require different interventions. Most teams design for the first and ignore the third entirely, then wonder why growth stalls in month one.

How Do You Bootstrap a Social Graph From Zero?

The instinct is to import. LinkedIn OAuth, phone contacts, Twitter follows. This works until it doesn't: GDPR Article 6 requires a lawful basis for processing contact data you didn't collect yourself, and App Store Review Guideline 5.1.1 restricts how you use contact information on iOS. More practically, a new product rarely has critical mass in any one imported network, so you end up with a sparse, disconnected graph that performs worse than a simple popularity baseline.

A more reliable pattern is interest-graph seeding. During onboarding, ask users to pick topics, not people. Five to seven explicit selections are enough to place a new user into a latent cluster. You don't need a social graph to start; you need a proxy for one.

The mechanics:

  1. Map onboarding selections to an embedding space pre-trained on your item corpus (or a public corpus like Common Crawl if you have no corpus yet).
  2. Assign the new user a centroid in that space.
  3. Serve items nearest that centroid, weighted by global popularity within the cluster.

This gives you a personalised-looking feed on day one using zero interaction data. The trick is that "personalised by interest" and "personalised by behaviour" are indistinguishable to a user who has never seen the alternative.

/// Not sure where to start?

Get the architecture before you commit

Tell us what you're building and we'll map the technical approach, stack, and rough timeline. No cost, no obligation, no sales call required.

What Signal Can You Actually Use Before a User Does Anything?

More than you'd think. Before the first click, you typically have:

Signal Quality Notes
Onboarding selections High Explicit, intentional
Referral source Medium Inferred intent from campaign or invite
Device / locale Low Demographic proxy, not behavioural
Time of first session Low Weak but non-zero for content timing
Email domain Medium Useful for B2B products specifically

The mistake is weighting these equally. Onboarding selections should dominate early. As soon as you have two or three implicit signals (scroll depth, session length, item views), you begin blending. A simple weighted average works fine at this stage. Matrix factorisation and two-tower neural retrieval models only pay off once you have tens of thousands of interactions per user cohort.

Exploration vs Exploitation in the Zero-Data Regime

Before you have enough data to exploit, you are entirely in exploration mode. That means accepting lower short-term engagement in exchange for learning. Teams that optimise click-through rate from day one overfit to popular content and never learn enough about their long-tail items to serve the users who actually want them.

Use Thompson Sampling or a simple ε-greedy policy (ε = 0.2 works well in practice) for item selection during the first 10 to 15 interactions. After that, fold in your collaborative signal.

Building the Graph Incrementally

Once users start interacting, you have the raw material for a real graph. The question is what edges to draw.

Explicit follows are rare. Implicit co-engagement is not. Two users who both complete 80% of the same five articles within 48 hours of each other are connected, even if they've never followed each other. Build edges on behavioural similarity, not social declarations.

A practical schema for an early-stage graph:

  • Nodes: users, items, topics.
  • Edges: user-item (weighted by engagement depth), item-topic (categorical), user-user (derived, not stored directly).

Do not materialise user-user edges in your database at first. Compute them at query time from the user-item bipartite graph using cosine similarity on interaction vectors. It's slower, but it avoids stale graph data and premature optimisation. Once you have more than 50,000 daily active users, materialise and index.

GraphSAGE and other inductive graph neural network methods let you generate embeddings for new nodes without retraining on the full graph. This is the right architecture for a growing platform: train on existing nodes, infer for new ones.

When to Introduce Social Features Explicitly

Social graph features, things like "people you may know" or activity feeds from followed users, should not go live until the implicit graph is dense enough to produce non-embarrassing suggestions. A rough threshold: median user should have at least 15 behavioural neighbours with a cosine similarity above 0.4 before you surface social recommendations.

Showing empty or poor social suggestions early is harder to recover from than showing none at all.

The Honest Trade-Offs

Interest-graph seeding works, but it has real costs. Onboarding friction goes up. Users who select interests carelessly get poor recommendations and churn before you can correct them. You need a fallback: if a user skips onboarding, fall back to geo-local popularity, which is almost always better than global popularity for new products.

The two-phase approach (interest seeding, then behavioural blending) also delays the point at which your model becomes genuinely predictive. Expect 7 to 14 days of mediocre personalisation per user before collaborative filtering adds meaningful lift. Plan your retention strategy around that window, not around the steady-state model performance.

If your product is high-stakes (financial decisions, medical content), the cold start phase is particularly risky because you are serving unsure recommendations with apparent confidence. Consider surfacing uncertainty explicitly: "We're still learning your preferences" is honest and sets the right expectation.

Conclusion

Cold start without a social graph is solvable, and the solution is not complicated. Seed from explicit interests, explore aggressively in early sessions, build your graph from behavioural co-engagement rather than social declarations, and resist the temptation to show social features before the underlying data is ready.

The clearest next step: audit your current onboarding flow. Count how many explicit interest signals you collect, and check whether they are actually wired into your recommendation pipeline or sitting unused in a database column. Most teams are surprised to find they have the data and aren't using it.

FAQ

Does this approach work for B2B products where users represent companies, not individuals? Yes, but the unit of interest seeding shifts to company attributes: industry vertical, company size, tech stack signals from enrichment tools like Clearbit. Behavioural edges are drawn between accounts, not individual users, and interaction events tend to be lower-volume, so you need longer observation windows before collaborative signal is reliable.

What if we have no item corpus to pre-train embeddings on? Use a pre-trained sentence transformer like all-MiniLM-L6-v2 from Sentence Transformers on your item metadata (titles, descriptions, tags). It performs well on domain-specific content without fine-tuning in most cases. Fine-tune once you have at least 10,000 user-item interaction pairs to learn from.

How do we handle users who select interests at onboarding and then behave completely differently? Weight recent implicit signals more heavily than historical explicit ones. A simple exponential decay on the onboarding centroid over 14 days, blending toward the behavioural centroid, handles most cases. Users who deliberately game or misclick onboarding are a small minority and not worth over-engineering for.

At what scale does a graph neural network become worth the infrastructure cost? GraphSAGE or similar inductive methods start earning their complexity around 100,000 nodes and 1 million edges. Below that, approximate nearest-neighbour search (FAISS, HNSW) on dense embeddings gives comparable recommendation quality at a fraction of the operational cost.

Is it worth buying third-party data to bootstrap the graph faster? Generally no. Third-party behavioural data is expensive, often stale, and introduces GDPR and CCPA compliance risk that is disproportionate for an early-stage product. The interest-seeding approach described here reaches comparable recommendation quality within two to three weeks of organic growth, which is fast enough for most launch timelines.

Have a project in mind? Contact Sodio Technologies to discuss your requirements and explore the right technology solution for your business.

/// Work with us

Talk to the engineers who'd build it

You'll get a technical scope, timeline and cost estimate from the people doing the work, not an account manager. In-house team, no subcontracting, since 2016.

Contact Us