slug: find-engineers-by-skill-and-city
type: recipe
format: usecase
audience: recruiting
status: published
title:
  en: Find machine learning engineers by skill and city
  zh: 按技能和城市找机器学习工程师
dek:
  en: Start from a job title, narrow to a country, a city and a skill one filter at a time, and see what each filter costs you before you read a single profile.
  zh: 从一个职位名称开始，一次加一个条件，缩小到国家、城市和技能；读任何一份档案之前，先看清每个条件让你少了多少人。
datasets: [people, jobs]
integration: [rest, mcp]
topics: [sourcing, skills, ai-talent]
regions: [US]
snapshot: 2026-09-30
published: 2026-09-30
exploration_credits: 79
agent_run: { low: 9, high: 21, cap: 30 }
highlights:
  - value: "3,161"
    label:
      en: machine learning engineers in San Francisco
      zh: 位旧金山的机器学习工程师
  - value: "230"
    label:
      en: of them list PyTorch as a skill
      zh: 位在技能里写了 PyTorch
usecase:
  who:
    en: A recruiter or hiring manager with an open role and a city in mind, who wants a shortlist without writing Boolean strings, and wants to know early whether the pool is 30 people or 3,000.
    zh: 手上有一个空缺、心里有个城市的招聘人员或用人经理：不想写布尔检索式，想先知道这个人才池是 30 人还是 3,000 人，再决定怎么找。
  ledger:
    file: ledger.json
    steps:
      - group: title
        label: { en: "Current title is machine learning engineer", zh: "当前职位是机器学习工程师" }
        clause: 'current_title match "machine learning engineer"'
      - group: us
        label: { en: "Based in the United States", zh: "人在美国" }
        clause: 'location.country eq "United States"'
      - group: city
        label: { en: "Based in San Francisco", zh: "人在旧金山" }
        clause: 'location.city eq "San Francisco"'
      - group: skill
        label: { en: "Lists PyTorch as a skill", zh: "技能里写了 PyTorch" }
        clause: 'skills match "pytorch"'
  figures:
    - file: cities.json
      dataset: people
      title:
        en: The same search in six US cities
        zh: 同样的条件，换六个美国城市
      note:
        en: The light bar is everyone with the title in the city; the dark bar is the part that also lists PyTorch. Groups under 10 people are shown as <10.
        zh: 浅色条是这个城市里所有这个职位的人，深色条是其中技能写了 PyTorch 的人。少于 10 人的组显示为 <10。
      within: count
      value: skill_count
      labels:
        San Francisco: { en: "San Francisco", zh: "旧金山" }
        New York: { en: "New York", zh: "纽约" }
        Seattle: { en: "Seattle", zh: "西雅图" }
        Boston: { en: "Boston", zh: "波士顿" }
        Austin: { en: "Austin", zh: "奥斯汀" }
        Chicago: { en: "Chicago", zh: "芝加哥" }
      legend:
        value: { en: "Lists PyTorch", zh: "写了 PyTorch" }
        within: { en: "All with the title", zh: "这个职位的所有人" }
    - file: skills.json
      dataset: people
      title:
        en: "Which skills the 3,161 in San Francisco list"
        zh: "旧金山这 3,161 人在技能里写了什么"
      note:
        en: "All 3,161 list at least one skill, but tool names are rare: Python on 40%, TensorFlow on 7.8%, PyTorch on 7.3%. A tool filter on skills keeps only the people who wrote the tool down."
        zh: "3,161 人都至少写了一项技能，但写具体工具的人很少：写 Python 的 40%，TensorFlow 7.8%，PyTorch 7.3%。按工具筛技能，只能留下把工具写出来的人。"
      within: base_count
      labels:
        any: { en: "Any skill listed", zh: "写了任意技能" }
        python: { en: "Python", zh: "Python" }
        tensorflow: { en: "TensorFlow", zh: "TensorFlow" }
        pytorch: { en: "PyTorch", zh: "PyTorch" }
      legend:
        value: { en: "Lists it", zh: "写了" }
        within: { en: "All 3,161", zh: "全部 3,161 人" }
    - file: postings.json
      dataset: jobs
      title:
        en: "What the 1,658 open US postings for the title ask for"
        zh: "美国 1,658 个在招的同名岗位要求什么"
      note:
        en: "Open postings in the United States whose title matches machine learning engineer, by whether the description names the tool. Postings ask for PyTorch far more often than profiles list it."
        zh: "美国标题匹配 machine learning engineer 的在招岗位，按岗位描述里是否提到这个工具计数。岗位要求 PyTorch 的比例，远高于档案里写了它的比例。"
      within: base_count
      labels:
        python: { en: "Python", zh: "Python" }
        tensorflow: { en: "TensorFlow", zh: "TensorFlow" }
        pytorch: { en: "PyTorch", zh: "PyTorch" }
      legend:
        value: { en: "Names it", zh: "提到了" }
        within: { en: "All 1,658 postings", zh: "全部 1,658 个岗位" }
  reads: [current_title, location.city, skills, experience.company.name, experience.tenure_months, education.school.name]
  next:
    - title: { en: "Read the shortlist", zh: "读短名单" }
      body:
        en: Ask the agent to read the 25 best matches (5 API Credits) and rank them by how recently they worked with the skill, not only whether it is listed.
        zh: 让 agent 读匹配度最高的 25 份档案（5 API Credits），按最近一次用到这个技能的时间排序，而不只看有没有写。
    - title: { en: "Widen before you give up", zh: "人太少先放宽" }
      body:
        en: Skills lists are sparse. If the last step leaves too few people, match the skill in the headline or job titles as well, or add the nearest metro area.
        zh: 很多人的技能栏写得不全。最后一步剩下太少时，把技能也放进标题或个人简介里去匹配，或者加上相邻的城市。
    - title: { en: "Move it to your ATS", zh: "导入你的招聘系统" }
      body:
        en: Have the agent write the shortlist as a table with the fields your ATS imports, so the next step happens where your team already works.
        zh: 让 agent 把短名单写成你的招聘系统能导入的表格，下一步就在团队平时用的地方继续。
  faq:
    - q: { en: "Does this page show any candidates?", zh: "这个页面会展示候选人吗？" }
      a:
        en: No. It shows counts only. Your agent reads the profiles on your key; nothing about a person is published here.
        zh: 不会。这里只有人数。档案由你的 agent 用你自己的 key 读取，这里不发布任何个人信息。
    - q: { en: "Why count first?", zh: "为什么先计数？" }
      a:
        en: A count costs 1 API Credit and tells you whether the filter is too tight or too loose before you pay to read records.
        zh: 一次计数只要 1 API Credit，花钱读记录之前就能知道条件是太紧还是太松。
    - q: { en: "Can I use another skill or city?", zh: "能换别的技能或城市吗？" }
      a:
        en: Yes. Change the title, the city and the skill in step 2 of the prompt; the cost stays about the same.
        zh: 可以。改提示词第 2 步里的职位、城市和技能即可，花费基本不变。
  method:
    - title: { en: "Population", zh: "统计范围" }
      body:
        en: Profiles visible through the Metix AI Platform on September 30, 2026 whose current title matches "machine learning engineer". Counts are visible profiles, not everyone in the market.
        zh: 2026 年 9 月 30 日通过 Metix AI Platform 可见、当前职位匹配 "machine learning engineer" 的档案。人数是可见档案数，不是市场上的全部人。
    - title: { en: "Filters", zh: "条件" }
      body:
        en: Each step adds one condition to the step before it, all in one all node. City is the city the person lists; skills are the skills the person lists.
        zh: 每一步在上一步的基础上加一个条件，全部放在同一个 all 节点里。城市是本人填写的城市，技能是本人填写的技能。
    - title: { en: "Limits", zh: "局限" }
      body:
        en: Many people leave their skills list short or out of date, so a skill filter undercounts. Titles vary; "ML engineer" and "applied scientist" are not included here.
        zh: 很多人的技能栏写得少或者没更新，技能条件会少算。职位名称五花八门，这里不包括 "ML engineer" 或 "applied scientist"。
