<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Dirk Jonker</title>
  <link>https://datadirk.com/writing/</link>
  <atom:link href="https://datadirk.com/writing/feed.xml" rel="self" type="application/rss+xml"/>
  <description>Notes and essays on people analytics.</description>
  <language>en</language>
  <lastBuildDate>Wed, 19 Aug 2026 00:00:00 +0000</lastBuildDate>
  <item>
    <title>HR wasn&#x27;t taking it</title>
    <link>https://datadirk.com/writing/hr-wasnt-taking-it/</link>
    <guid isPermaLink="true">https://datadirk.com/writing/hr-wasnt-taking-it/</guid>
    <pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate>
    <description>The argument I have been making since 2006, in three paragraphs, because it still needs making.</description>
    <content:encoded><![CDATA[<p>In 2006 I was an actuary in New York who had moved into strategy consulting. Two
years later the financial crisis had companies making decisions about people
they had no evidence for. Which roles to cut. What a reorganisation would cost
eighteen months out. Whether the pay round was affordable.</p>
<p>HR was in the room for every one of those conversations and could not answer
them. Not because the people were not good at their jobs, but because nobody
had built the thing that would let them. Finance could put a number on its
opinions. HR could not.</p>
<p>Twenty years later that is still the gap, and it is now the whole opportunity.
A model that can tell you what a decision costs before you commit to it changes
what HR is allowed to say in a room. That is what I mean by Business HR, and
everything else I write here is a working out of it.</p>]]></content:encoded>
  </item>
  <item>
    <title>How you can experience the power of LLMs in HR</title>
    <link>https://datadirk.com/writing/how-you-can-experience-the-power-of-llms-in-hr/</link>
    <guid isPermaLink="true">https://datadirk.com/writing/how-you-can-experience-the-power-of-llms-in-hr/</guid>
    <pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate>
    <description>Build a local AI assistant for people analytics on your own laptop. No cloud, no API calls, nothing leaves your machine.</description>
    <content:encoded><![CDATA[<p>We are likely two to three years away from Artificial General Intelligence (AGI). This is no longer a futuristic concept. It’s coming, fast. AGI won’t just be better tools: it has the ability to replace anyone behind a computer, including many roles in HR.</p>
<p>That’s why now is the time to experiment, learn, and build. This moment is an invitation for HR professionals to get hands-on with large language models (LLMs) and experience what they’re capable of. The goal is not to become a developer, but to understand just enough to shape what’s coming.</p>
<hr />
<p><strong>What we will build together</strong></p>
<p>This is a simple AI assistant that helps people analytics teams get quick, meaningful insights from employee survey comments. It runs entirely on your own machine—no cloud, no API calls—so everything stays private and secure.</p>
<p>You just ask it open-ended questions in plain English, like “What do employees say about recognition in the Sales department?” and it responds with a concise summary based directly on what employees actually wrote in their survey responses.</p>
<p>Behind the scenes, it uses modern AI tools to understand language, organize your data, and generate answers—everything runs locally using Ollama and LLaMA3. The setup takes a few steps, but once it’s running, the experience is smooth and instant. It’s a great way to make open-text feedback accessible and actionable for your team.</p>
<p>This is more than a fun experiment. With AGI just a few years away, now is the moment for HR to get hands-on, build intuition, and lead the way. Jump on the train, or risk being left behind.</p>
<p><strong>Setting up the environment on your computer</strong></p>
<p>Step one is setting up your environment. I’m using Docker to run everything in a contained workspace. Think of Docker as a ready-to-use lab for running software—no setup headaches, no compatibility issues, no messy installs. It lets you run powerful tools like AI assistants in a clean, self-contained environment right on your computer. Everything you need is bundled together: the code, the AI model, and all the technical bits behind the scenes.</p>
<p>For people analytics teams, this means you don’t need to be an engineer to start experimenting with AI. With Docker, you can launch a local assistant that reads your employee survey comments and gives you clear, smart summaries—without touching the cloud or sharing your data. It works the same on every machine, and it keeps things private, simple, and fun.</p>
<p>This setup gives you your own AI sandbox, right on your laptop. It’s a low-risk way to build confidence with generative AI—and with AGI just a few years out, now is the time to start playing and learning.</p>
<p>Next, download <a href="https://ollama.com/">Ollama</a> to run the AI model locally. Think of Ollama as a simple, developer-friendly tool that makes large language models (LLMs) like LLaMA3 easy to use on your own machine. It handles all the loading, running, and chatting with the model—no API keys, no cloud latency, and no risk of leaking sensitive data. If ChatGPT runs in the cloud, Ollama is what brings that power directly to your laptop, under your control.</p>
<p>Finally, you’ll need a code editor—something like <a href="https://code.visualstudio.com/">VS Code</a> works perfectly. It lets you view and modify the scripts if you want, but you won’t need to code anything to get started.</p>
<p>The beauty of this setup is that everything happens locally, it’s fast, private, and fully contained. Just fire it up, ask your questions, and see what your people are really saying.</p>
<p>Once you installed Ollama, run this command. On the Ollama website you can see there are many other LLMs you can use. I&rsquo;m choosing Llama3</p>
<pre><code>ollama pull llama3
</code></pre>
<hr />
<p><strong>Setting up your project folder and adding the code.</strong></p>
<p>Now that you’ve got your survey data in a CSV file, it’s time to give your AI assistant the structure it needs to run. Think of this step like setting up the workspace: folders, files, and logic that will bring your data and questions to life.</p>
<p>Start by creating a folder on your computer—call it something like survey-ai. Inside this folder, you’ll add:</p>
<ul>
<li>Your survey CSV file (for example, survey_data.csv)</li>
<li>A few Python scripts that do the heavy lifting</li>
<li>A Dockerfile to build the container</li>
<li>A requirements.txt file that lists the Python libraries your assistant needs</li>
</ul>
<p>Here’s what the folder structure will look like:</p>
<pre><code>datadirk-survey-ai/
├── ask_survey_agent.py
├── index_survey.py
├── survey_data.csv
├── requirements.txt
├── Dockerfile
</code></pre>
<p>Let’s quickly walk through what each of the scripts does:</p>
<ul>
<li><strong>index_survey.py</strong>: reads your survey responses, splits them into chunks, generates vector embeddings, and stores them in a local ChromaDB database.</li>
<li><strong>ask_survey_agent.py</strong>: takes your question, finds the most relevant survey chunks, builds a context prompt, and asks LLaMA3 (via Ollama) to generate an answer.</li>
<li><strong>Dockerfile</strong>: defines the environment—Python version, dependencies, and where your code lives.</li>
<li><strong>requirements.txt</strong>: lists the Python packages your assistant depends on (chromadb, sentence-transformers, pandas, etc.).</li>
</ul>
<p>Here you can find the bare minimum code for each file:</p>
<p><strong>index_survey.py</strong></p>
<pre><code>import pandas as pd
from sentence_transformers import SentenceTransformer

import chromadb
chroma_client = chromadb.PersistentClient(path=&quot;./survey_db&quot;)

# Load survey
df = pd.read_csv(&quot;survey_data.csv&quot;)

# Prepare chunks
chunks = []
for _, row in df.iterrows():
    if pd.notna(row.get(&quot;question&quot;)):
        chunks.append(f&quot;{row['department']} department: '{row['question']}' - Response: {row.get('response', 'N/A')}, Score: {row.get('score', 'N/A')}&quot;)
    if pd.notna(row.get(&quot;comment&quot;)):
        chunks.append(f&quot;{row['department']} department: Comment: {row['comment']}&quot;)

# Embed
model = SentenceTransformer('all-MiniLM-L6-v2')
collection = chroma_client.get_or_create_collection(name=&quot;survey_chunks&quot;)
collection.delete(ids=[str(i) for i in range(len(chunks))])

for i, chunk in enumerate(chunks):
    vector = model.encode(chunk).tolist()
    collection.add(documents=[chunk], embeddings=[vector], ids=[str(i)])

print(&quot;Your survey data has been indexed.&quot;)
</code></pre>
<p><strong>ask_survey_agent.py</strong></p>
<pre><code>import requests
from sentence_transformers import SentenceTransformer
import chromadb
from utils import stream_to_text, summarize_with_llama

# Connect to Chroma and model
chroma_client = chromadb.PersistentClient(path=&quot;./survey_db&quot;)
model = SentenceTransformer('all-MiniLM-L6-v2')
collection = chroma_client.get_or_create_collection(name=&quot;survey_chunks&quot;)

# Ask a question
question = input(&quot;Ask a question about the survey: &quot;)
query_vec = model.encode(question).tolist()
results = collection.query(query_embeddings=[query_vec], n_results=3)
context = &quot;\n&quot;.join(results[&quot;documents&quot;][0])

# Build prompt
prompt = f&quot;&quot;&quot;
You are an expert HR analyst helping interpret employee survey data.

Use the following context to answer the question.

Context:
{context}

Question:
{question}

Answer:
&quot;&quot;&quot; 

# Call Ollama
response = requests.post(
    &quot;http://host.docker.internal:11434/api/chat&quot;,
    json={&quot;model&quot;: &quot;llama3.2:latest&quot;, &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: prompt}]},
    stream=True
)

if response.status_code != 200:
    print(&quot;Error from Ollama:&quot;, response.text)
    exit(1)

content = stream_to_text(response)
print(&quot;\nAI Answer:\n&quot;, content)

with open(&quot;qa_log.txt&quot;, &quot;a&quot;) as log:
    log.write(f&quot;Q: {question}\nA: {content}\n{'-'*40}\n&quot;)

summarize_with_llama()
</code></pre>
<p><strong>Dockerfile</strong></p>
<pre><code>FROM python:3.10-slim

RUN apt-get update &amp;&amp; apt-get install -y \
    git build-essential &amp;&amp; rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [&quot;python3&quot;, &quot;ask_survey_agent.py&quot;]
</code></pre>
<p><strong>requirements.txt</strong></p>
<pre><code># Core dependencies
pandas==2.2.2
chromadb==0.4.22
sentence-transformers==2.6.1
requests==2.31.0
numpy&lt;2.0
</code></pre>
<p>Once the files are in place, build your Docker image from inside the folder:</p>
<pre><code>docker build -t datadirk-ai .
</code></pre>
<p>This will create a clean, self-contained AI assistant on your machine. No extra setup, no dependency issues.</p>
<p><strong>Preparing your data.</strong></p>
<p>The assistant works by reading actual employee survey comments and turning them into something searchable and meaningful using AI. But before it can do that, we need to organize the data in a simple format the assistant understands.</p>
<p>Start with a CSV file—a spreadsheet where each row is a comment from an employee. You can export this directly from your existing survey platform. All you need is a column with the comment text, and ideally a few extra columns like department, location, or role. That context helps the assistant give more targeted answers later.</p>
<p>Here’s a simple example of what your CSV might look like:</p>
<table>
<thead>
<tr>
<th><strong>Comment</strong></th>
<th><strong>Department</strong></th>
<th><strong>Location</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>I feel valued by my manager and the team.</td>
<td>Sales</td>
<td>New York</td>
</tr>
<tr>
<td>Too much overtime lately, it&rsquo;s burning people out.</td>
<td>Sales</td>
<td>Chicago</td>
</tr>
<tr>
<td>Communication from leadership could be clearer.</td>
<td>HR</td>
<td>London</td>
</tr>
</tbody>
</table>
<p>Once your file is ready, the AI assistant will read each comment, break it into smaller, meaningful chunks, and turn those chunks into numeric “embeddings”, basically, smart fingerprints that help the AI understand what the text <em>means</em>, not just what it says. This is done using a language model called sentence-transformers. It’s part of the behind-the-scenes magic that lets the system respond to your questions with context-aware insights.</p>
<p>To store all this efficiently, we use a tool called <strong>ChromaDB</strong>. It’s a local vector database that remembers all those embeddings. Think of it as a smart filing cabinet for everything your people said, one the AI can search instantly, by meaning.</p>
<p>The best part? Everything stays on your machine. No cloud upload, no third-party processing. You get fast, private access to your data. And full control over how it’s used.</p>
<hr />
<p><strong>Launching your local AI assistant.</strong></p>
<p>Now that your data is structured and prepped, it’s time to bring your assistant to life. This part wires everything together so you can start asking natural-language questions and getting real answers—directly from your survey data.</p>
<p>You’ll run a short script that does three things:</p>
<ol>
<li>It loads your CSV file and turns each comment into a vector using sentence-transformers. These vectors capture the meaning of the text.</li>
<li>It stores those vectors into <strong>ChromaDB</strong>, your local search engine that can instantly find the most relevant comments based on the question you ask.</li>
<li>It waits for your question, finds the most relevant pieces of context, and sends it to <strong>LLaMA3</strong>, running locally through <strong>Ollama</strong>, to generate a smart, human-style answer.</li>
</ol>
<p>To make this happen, we use Python scripts and Docker. Everything you need is already bundled inside the Docker container, so you don’t have to install or configure anything manually.</p>
<p>Here’s what you run to start indexing your data:</p>
<pre><code>docker run -it --network=host datadirk-ai python3 index_survey.py
</code></pre>
<p>Once that’s done, start the assistant like this:</p>
<pre><code>docker run -it --network=host datadirk-ai
</code></pre>
<p>It will ask you to type a question like: <em>What do employees say about recognition in the Sales department?</em></p>
<p>And it will respond with a synthesized answer based directly on what employees actually said. No keywords, no filtering—just meaning, summarized for you in natural language.</p>
<p>This is where things get exciting. Suddenly, open-text comments become something you can <em>use</em>. You can dig into themes, compare departments, spot blind spots—and do it all in seconds, without waiting for an analyst or writing a single formula.</p>]]></content:encoded>
  </item>
  <item>
    <title>Measuring AI fluency</title>
    <link>https://datadirk.com/writing/measuring-ai-fluency/</link>
    <guid isPermaLink="true">https://datadirk.com/writing/measuring-ai-fluency/</guid>
    <pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
    <description>You will spend a year raising AI fluency. Did it go up? Anthropic&#x27;s 4D framework treats working with AI as a learnable skill set, and only one of the four is prompting.</description>
    <content:encoded><![CDATA[<p>Most companies I talk to are a year into an AI push. They have bought licences,
run training, appointed someone to own it. Ask them whether fluency actually
went up and the room goes quiet, because nobody measured where it started.</p>
<p>That is a strange position for HR to be in. Measuring whether a capability
improved is the one thing HR is supposed to be good at.</p>
<h2>The 4D framework</h2>
<p>Anthropic built a framework for this with Rick Dakan and Joseph Feller. They call
it the 4D. It treats working with AI as a learnable skill set with four parts,
and it comes with an assessment, so you can find out where people actually sit.</p>
<p>Read the four out loud to a room and watch what happens. Almost everybody assumes
AI skill means prompting. Only one of the four is prompting.</p>
<figure class="fig">
<svg viewBox="0 0 760 300" role="img" aria-label="The four dimensions: delegation, description, discernment, diligence">
  <g font-family="var(--mono)" font-size="10.5" letter-spacing="1.6" fill="var(--ink-4)">
    <text x="30" y="26">BEFORE</text><text x="215" y="26">DURING</text>
    <text x="400" y="26">AFTER</text><text x="585" y="26">THROUGHOUT</text>
  </g>
  <g>
    <rect x="24" y="40" width="164" height="190" rx="14" fill="none" stroke="var(--line-2)"/>
    <rect x="209" y="40" width="164" height="190" rx="14" fill="none" stroke="var(--orange)"/>
    <rect x="394" y="40" width="164" height="190" rx="14" fill="none" stroke="var(--line-2)"/>
    <rect x="579" y="40" width="164" height="190" rx="14" fill="none" stroke="var(--line-2)"/>
  </g>
  <g font-family="var(--sans)" font-size="17" font-weight="600" fill="var(--ink)">
    <text x="46" y="76">Delegation</text><text x="231" y="76">Description</text>
    <text x="416" y="76">Discernment</text><text x="601" y="76">Diligence</text>
  </g>
  <g font-family="var(--sans)" font-size="13" fill="var(--ink-2)">
    <text x="46" y="108">Deciding what to</text><text x="46" y="126">hand over at all,</text>
    <text x="46" y="144">and what to keep.</text>
    <text x="231" y="108">Telling it what</text><text x="231" y="126">you want, and how</text>
    <text x="231" y="144">you want it worked.</text>
    <text x="416" y="108">Judging what</text><text x="416" y="126">came back, and</text>
    <text x="416" y="144">whether to trust it.</text>
    <text x="601" y="108">Owning the result.</text><text x="601" y="126">Responsibility and</text>
    <text x="601" y="144">accountability.</text>
  </g>
  <g font-family="var(--mono)" font-size="10.5" letter-spacing="1.2" fill="var(--orange)">
    <text x="231" y="204">THIS IS THE PROMPTING ONE</text>
  </g>
  <g font-family="var(--mono)" font-size="10.5" letter-spacing="1.2" fill="var(--ink-4)">
    <text x="46" y="204">JUDGEMENT</text><text x="416" y="204">JUDGEMENT</text><text x="601" y="204">JUDGEMENT</text>
  </g>
  <text x="384" y="272" text-anchor="middle" font-family="var(--sans)" font-size="14" fill="var(--ink-3)">
    Three of the four are judgement. Training that only teaches prompting raises one quarter of the skill.</text>
</svg>
<figcaption>The 4D, laid out in the order the work happens.</figcaption>
</figure>

<h2>Delegation</h2>
<p>Deciding what to hand to AI, and what to keep.</p>
<p>This is the one people skip, and it is the one that separates someone useful from
someone who has simply been given a tool. It asks two questions at once. Is this
task a good fit for a model at all, and am I the right person to be deciding
that?</p>
<p>In HR the cost of getting this wrong is high in a specific way. Handing a model a
drafting job is fine. Handing it a decision about an individual, or a piece of
work where the input is personal data that should not be leaving your building,
is a different matter, and no amount of skill at the other three dimensions
rescues you.</p>
<p>Good delegation also means knowing when to do the work yourself because the
thinking is the point. Some tasks exist so that the person doing them
understands the problem afterwards.</p>
<h2>Description</h2>
<p>Telling it what you want, and how you want it worked.</p>
<p>This is prompting, and it is the part everyone means when they say AI skills. It
matters. Being able to say what good looks like, supply the right context, set
constraints, give an example, and ask for the working rather than only the answer
makes a large difference to what you get back.</p>
<p>It is also the most teachable of the four, which is why training goes here. A
day of practice moves people a long way. That is worth doing, and it is worth
being honest that you have then improved one quarter of the thing.</p>
<h2>Discernment</h2>
<p>Judging what came back.</p>
<p>This is where most of the risk lives. A model produces something fluent every
time, whether or not it is right, and fluency is persuasive. Discernment is the
habit of asking what would have to be true for this to be correct, spotting the
number that is confidently wrong, noticing the citation that does not exist, and
recognising the answer that is plausible because it is average rather than
because it fits your situation.</p>
<p>People with deep domain knowledge are usually good at this immediately, in their
own domain, and poor at it everywhere else. That is worth remembering when you
decide who to put in front of a model and on what.</p>
<p>I find this the hardest of the four to raise through training, because it is
mostly expertise wearing a different hat. What does help is making people show
their checking, out loud, in front of each other.</p>
<h2>Diligence</h2>
<p>Owning the result: responsibility, transparency, accountability.</p>
<p>Whoever put the work out is answerable for it. That means being open about what
was AI assisted, keeping enough of a trail that a decision can be explained later,
and not treating a model&rsquo;s involvement as a reason the answer was somebody else&rsquo;s
fault.</p>
<p>For HR this is the dimension with a compliance edge. If a model touched a process
that affects people&rsquo;s pay, progression or employment, you will at some point be
asked to explain how. Diligence is having an answer ready before you are asked.</p>
<h2>What to do with the score</h2>
<p>An assessment gives you a number per person across four dimensions. That number
on its own is mildly interesting and easy to over-read.</p>
<p>It gets interesting the moment you connect it to everything else you already
know about your workforce, which is exactly the kind of joining HR should be
able to do. Four questions I would ask first:</p>
<table>
<thead>
<tr>
<th></th>
<th>Question</th>
<th>Why it matters</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Are we losing people at fluency level one, or level five?</td>
<td>Tells you whether your AI push is retaining your best people or driving them out</td>
</tr>
<tr>
<td>2</td>
<td>Do we reward higher fluency?</td>
<td>If pay and promotion ignore it, the training will not stick</td>
</tr>
<tr>
<td>3</td>
<td>Do our most fluent people sit in the most critical positions?</td>
<td>Capability in the wrong place is not capability</td>
</tr>
<tr>
<td>4</td>
<td>Are we still hiring and promoting people who are not fluent at all?</td>
<td>The intake decides where you are in three years</td>
</tr>
</tbody>
</table>
<p>Every one of those needs the fluency score joined to turnover, reward,
performance, position criticality and hiring. None of them are answerable from
the assessment alone.</p>
<h2>How I would run it</h2>
<p>Baseline this month, before any more training. Take the assessment across a
population you care about, and record where people start, because a year from
now the only honest way to say whether it worked is to compare.</p>
<p>Then measure again in six months. Split the result by the four dimensions rather
than reporting one blended number, because the shape tells you what to do next.
A team that scores well on description and badly on discernment needs something
completely different from a team with the opposite shape.</p>
<p>And expect the leadership scores to be the awkward part. Fluency is cultural, and
culture follows what leaders actually do rather than what they announce. If the
executive team has signed the budget and delegated the whole thing, that shows up
in the numbers, and it is the most useful thing the assessment will tell you.</p>]]></content:encoded>
  </item>
  <item>
    <title>World models, and why HR needs one</title>
    <link>https://datadirk.com/writing/world-models-and-why-hr-needs-one/</link>
    <guid isPermaLink="true">https://datadirk.com/writing/world-models-and-why-hr-needs-one/</guid>
    <pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate>
    <description>I heard the term at MIT in April and have been thinking about it since. What a world model is, how it differs from predictive analytics, and why HR is the obvious place to build one.</description>
    <content:encoded><![CDATA[<p>In April I went to Imagination in Action, an AI conference at MIT. Someone used
the term world model. It had nothing to do with HR, and the people using it did
not think it was a new idea. I have been thinking about it ever since, because
it named something I had been trying to build for years without having a word
for it.</p>
<h2>Physicists have had these for a century</h2>
<p>A world model is a model of how a system behaves. You give it a state and you
give it a force, and it tells you what happens next.</p>
<p>Gravitation is the easy example. A model of gravitation does not describe the
solar system. It simulates it. Give it the masses and the velocities and it will
tell you where the planets are in fifty years. Nobody had to observe those fifty
years first. The same idea runs fluid dynamics, where you give it pressure and
geometry and it tells you where turbulence forms, and climate models, where you
give it the forcings and it tells you what the system does over decades.</p>
<p>This is old and well understood. The interesting part is how small the leap is
to an organisation.</p>
<p>An organisation is a system too. It has a state: who is where, doing what, under
whom, for how long, paid how much. It has forces acting on it: pay, managers,
promotion, workload, the labour market outside. If you can describe the state and
you know how the forces behave, you can simulate what happens next.</p>
<figure class="fig">
<svg viewBox="0 0 760 220" role="img" aria-label="A world model takes a state and a force and returns the next state">
  <defs><marker id="wm-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
    <path d="M0 0 L10 5 L0 10 z" fill="var(--ink-3)"/></marker></defs>
  <g font-family="var(--mono)" font-size="11" letter-spacing="1.5" fill="var(--ink-3)">
    <text x="76" y="34" text-anchor="middle">STATE</text>
    <text x="76" y="196" text-anchor="middle">FORCE</text>
    <text x="380" y="34" text-anchor="middle">WORLD MODEL</text>
    <text x="668" y="34" text-anchor="middle">NEXT STATE</text>
  </g>
  <rect x="12" y="48" width="128" height="58" rx="10" fill="none" stroke="var(--line-2)"/>
  <rect x="12" y="126" width="128" height="58" rx="10" fill="none" stroke="var(--line-2)"/>
  <rect x="252" y="48" width="256" height="136" rx="14" fill="none" stroke="var(--orange)"/>
  <rect x="604" y="48" width="128" height="136" rx="10" fill="none" stroke="var(--line-2)"/>
  <g font-family="var(--sans)" font-size="13" fill="var(--ink-2)" text-anchor="middle">
    <text x="76" y="72">Who is where,</text><text x="76" y="90">on what, under whom</text>
    <text x="76" y="150">Pay, managers,</text><text x="76" y="168">promotion, workload</text>
    <text x="380" y="106" font-size="14" fill="var(--ink)">What moves what,</text>
    <text x="380" y="126" font-size="14" fill="var(--ink)">and by how much</text>
    <text x="668" y="106">Where you end up</text><text x="668" y="124">in eighteen months</text>
  </g>
  <g stroke="var(--ink-3)" stroke-width="1.4" fill="none" marker-end="url(#wm-arrow)">
    <path d="M140 77 L246 106"/><path d="M140 155 L246 126"/><path d="M508 116 L598 116"/>
  </g>
</svg>
<figcaption>The whole idea. State in, force in, next state out. Physics has run on this for a hundred years.</figcaption>
</figure>

<h2>How this differs from predictive analytics</h2>
<p>This is the question I get asked most, and it is a fair one, because on the
surface both of them produce a number about the future.</p>
<p>Predictive analytics looks at what happened before and finds a pattern in it. It
learns that people who have been in the same role for four years, whose manager
scores badly, who have not had a raise recently, tend to leave. Then it scores
your current people against that pattern and hands you a list. This is useful. I
have built plenty of it and I am not going to talk anyone out of it.</p>
<p>The limit is what it can answer. A prediction tells you where you are heading if
everything carries on as it is. Ask it what happens if you change something and
it has nothing to say, because the change you are considering has not happened
yet, so there is no pattern of it to learn from.</p>
<p>A world model is built the other way round. Instead of learning who leaves, it
learns what moves leaving. How much a manager change moves it. How much a pay
increase moves it, at which levels, and how long the effect lasts. Once you have
that, you can set a state, apply a force that has never been applied before, and
watch the organisation respond.</p>
<table>
<thead>
<tr>
<th></th>
<th>Predictive analytics</th>
<th>World model</th>
</tr>
</thead>
<tbody>
<tr>
<td>Question</td>
<td>Who is likely to leave?</td>
<td>What happens if we do this?</td>
</tr>
<tr>
<td>Learns</td>
<td>Patterns in what happened</td>
<td>Cause and effect, and how strong</td>
</tr>
<tr>
<td>Handles a new decision</td>
<td>No, there is no history of it</td>
<td>Yes, that is the point</td>
</tr>
<tr>
<td>Output</td>
<td>A ranked list of people</td>
<td>A simulated outcome, with a cost</td>
</tr>
<tr>
<td>Good for</td>
<td>Spotting risk early</td>
<td>Choosing between options</td>
</tr>
</tbody>
</table>
<p>Both are worth having. They answer different questions and the second question
is the one an executive actually asks.</p>
<h2>What this looks like in HR</h2>
<p>Take a decision you make every year. Someone proposes a three percent increase
to base pay. Finance wants to know what it costs. Everyone in the room already
knows the answer to that, because it is arithmetic.</p>
<p>Nobody in the room can answer the second question, which is what it buys. Some
of that money comes back. Fewer people leave, so you spend less on recruitment
and less on the months a seat sits empty. Absence moves. Productivity moves a
little. The effect does not arrive on the same clock as the cost either, because
the cost lands in month one and in full, while the return builds over a year.</p>
<p>A world model can walk that month by month and give you the net. The useful
number is what the increase costs once the organisation has responded to it. The
gross figure is only where the conversation starts.</p>
<p>The same shape covers most of the decisions HR is asked about. What a
reorganisation costs in attrition eighteen months out. Whether filling senior
seats from outside instead of promoting internally quietly jams the organisation
and how long that takes to show. What a richer benefits package returns, priced
in retention rather than in premium.</p>
<figure class="fig">
<svg viewBox="0 0 760 250" role="img" aria-label="Cost lands in month one, the return builds across the year">
  <g stroke="var(--line)" stroke-width="1">
    <line x1="60" y1="200" x2="720" y2="200"/><line x1="60" y1="40" x2="60" y2="200"/>
  </g>
  <g font-family="var(--mono)" font-size="10.5" fill="var(--ink-4)" letter-spacing="1">
    <text x="60" y="220">M1</text><text x="280" y="220">M6</text>
    <text x="500" y="220">M12</text><text x="700" y="220">M18</text>
  </g>
  <path d="M60 90 L720 90" stroke="var(--ink-3)" stroke-width="2" stroke-dasharray="5 4" fill="none"/>
  <path d="M60 200 C 220 196, 340 168, 460 136 S 640 104, 720 96" stroke="var(--orange)" stroke-width="2.5" fill="none"/>
  <g font-family="var(--sans)" font-size="13">
    <text x="72" y="80" fill="var(--ink-2)">Gross cost. Lands in month one, in full, and stays.</text>
    <text x="330" y="186" fill="var(--orange)">What comes back, building month by month</text>
  </g>
  <g font-family="var(--mono)" font-size="10.5" fill="var(--ink-4)" letter-spacing="1.5">
    <text x="20" y="66">COST</text>
  </g>
</svg>
<figcaption>Why the annual figure misleads. The two lines move on different clocks, and the gap between them is the thing worth arguing about.</figcaption>
</figure>

<h2>What it takes</h2>
<p>A world model needs three things, and the first two are the reason so few
organisations have one.</p>
<p>It needs connected data, joined at the person, so that the pay system and the
performance system and the absence system are describing the same human being.
It needs managed definitions, so that headcount means one thing across the whole
model. Then it needs the relationships themselves, learned from your
organisation rather than from a benchmark, and kept current, because a
relationship measured three years ago in a different labour market is not
reliable now.</p>
<p>None of that is exciting and all of it is the work. The model on top is
comparatively straightforward once the layers underneath hold.</p>
<h2>Why now</h2>
<p>Two things changed. Enough HR data is now in one place often enough that
learning real relationships from it is possible. And the language models everyone
is talking about turn out to be the wrong tool for this, which has made the gap
easier to see. A language model predicts the next word from everything ever
written. It has never read your reorganisation, your pay round, or this morning&rsquo;s
vacancy list, and it never will, because that information arrives after the model
is sealed.</p>
<p>What HR needs is a model of the next action inside one specific organisation,
learned from that organisation, still true this quarter. That is a different
thing, and physicists have known how to build it for a hundred years.</p>]]></content:encoded>
  </item>
</channel>
</rss>
