IlmHamroh
Data Science va sun'iy intellekt/Loyihalar va karyera8/12-dars51 daqiqa
Mundarija (24)

29.8-dars: Rezyume va ish qidirish

29-QISM — LOYIHALAR VA KARYERA · 8-dars


1. Kirish va motivatsiya

Oldingi darsda portfolio yaratdik: loyihalarni tanlash, har biriga tushunarli README, natijani bir qarashda ko'rsatadigan sahifa. Portfolio — sizning ishingiz haqidagi batafsil hikoya. Lekin ish beruvchi uni ochishidan oldin boshqa hujjatni ko'radi — rezyumeni. Rezyume bitta savolga javob beradi: "bu odam bilan suhbatlashishga vaqt sarflashga arziydimi?" Unga ko'pincha bir necha daqiqa, ba'zan undan ham kam vaqt ajratiladi. Bu darsda o'sha daqiqalarni qanday ishlatish va rezyume yuborilgandan keyingi butun jarayonni — vakansiyani o'qishdan tortib ariza voronkasini boshqarishgacha — data scientist kabi tahlil qilishni o'rganamiz.

Real vaziyat. Kursni tugatgan tahlilchi ikki oy davomida 70 ta vakansiyaga bir xil rezyume yubordi va faqat bitta javob oldi. U "bozorda ish yo'q" degan xulosaga keldi. Keyin rezyumesini ochib qaradi: tajriba bo'limida "Kredit modeli ustida ishladim", "Hisobotlar tayyorlashda yordam berdim" — nima qilgani, qanday qilgani va nima o'zgargani yo'q. Ko'nikmalar qatorida "sklearn", vakansiyada esa "scikit-learn"; vakansiyadagi majburiy talablarning yarmi rezyumeda umuman tilga olinmagan, garchi u ularni bilsa ham. Muammo bozor emas, voronkaning birinchi bosqichi edi — va buni sonlar bilan ko'rsatish mumkin edi: 1/70 javob, bu bosqichdagi konversiya oraliq baholarda ham faraziy mezondan past. Bu darsning 1, 2 va 4-misollarida aynan shu vaziyatni tahlil qilamiz.

Bu darsda rezyume va ish qidirishga ma'lumot bilan yondashamiz: rollarni farqlash, rezyume punktlarini o'lchanadigan qilib yozish, vakansiya bilan moslikni tekshirish va ariza voronkasining tor joyini topish.

Bu darsda:

  • DS rollari: Data Analyst, Data Scientist, ML Engineer, MLOps, Research — farqlari va kursning mos qismlari
  • Rezyume tuzilishi: 1 sahifa, bo'limlar tartibi
  • Punkt formulasi: fe'l + nima + qanday + o'lchanadigan natija
  • Vakansiyani o'qish: majburiy va afzallik, yashirin talablar
  • ATS (avtomatik saralash) — nima ma'lum va nima noma'lum
  • Ish qidirish strategiyasi: tarmoq, tavsiya, stajirovka, freelance, ochiq manba
  • Mahalliy va xalqaro bozor — umumiy farqlar
  • Rezyume namunasi
  • Tuzoqlar

ℹ Misollar real numpy/scipy/sklearn bilan (Python 3.14). Vakansiyalar, rezyumelar va voronka konversiyalari sintetik yoki faraziy — ular mexanizmni ko'rsatadi, real bozor haqida raqam bermaydi. Maosh, vakansiyalar soni va konversiyalar haqida joriy ma'lumotni rasmiy va ishonchli manbalardan tekshiring.


2. Nazariya — chuqur tushuntirish

2.1. Data Science rollari

"Data Science" — bitta kasb emas, bir-biriga yaqin bir necha rolning umumiy nomi. Vakansiya sarlavhasi bir xil bo'lsa ham, turli tashkilotlarda ish mazmuni juda farq qilishi mumkin: bir bankdagi "Data Scientist" kun bo'yi SQL hisobot yozadi, boshqa startapdagi "Data Analyst" esa model quradi. Shuning uchun sarlavhaga emas, vazifalar ro'yxatiga qarang.

text
                 ASOSIY SAVOL                     NATIJA (mahsulot)
DATA ANALYST     "nima bo'ldi va nega?"           hisobot, dashboard, tavsiya
DATA SCIENTIST   "nima bo'ladi? nima qilsak       model, tajriba natijasi,
                  nima o'zgaradi?"                 sababiy tahlil
ML ENGINEER      "modelni qanday ishonchli         xizmat (API), quvur,
                  ishlatamiz?"                     ishlab chiqarishdagi model
MLOPS            "modellar hayot siklini qanday   platforma: CI/CD, registr,
                  avtomatlashtiramiz?"             monitoring, infratuzilma
RESEARCH         "qanday yangi usul ishlaydi?"    maqola, yangi arxitektura,
                                                   prototip, benchmark

Chegaralar qat'iy emas: kichik jamoada bitta odam 2-3 rolni bajaradi,
katta tashkilotda har rol yana bo'linadi (masalan, "Product Analyst",
"Decision Scientist", "NLP Engineer", "Data Engineer").
Rol Kundalik ish Asosiy vositalar Kursning ko'proq mos qismlari
Data Analyst SQL so'rovlar, metrikalar, dashboard, A/B test natijasini o'qish, biznes bilan muloqot SQL, Excel, BI vositalari, pandas, vizualizatsiya 03, 04, 05, 06, 08, 11
Data Scientist savolni modelga aylantirish, belgi muhandisligi, model va tajriba, natijani tushuntirish Python, pandas, scikit-learn, gradient boosting, statistika 04, 09, 11, 12-19, 28
ML Engineer modelni xizmatga aylantirish, tezlik va ishonchlilik, chuqur o'qitish Python, PyTorch, Docker, API, Git, test 19, 20-24, 27
MLOps quvurlar, registr, monitoring, drift, qayta o'qitish avtomatikasi Docker, orkestratorlar, CI/CD, bulut, monitoring 27 (to'liq), 28.10
Research yangi usul, eksperiment dizayni, maqola o'qish va yozish PyTorch, chiziqli algebra, ehtimollik, ingliz tili 09, 10, 20-26

Qaysi rolga birinchi urinish kerak? Umumiy kuzatuv: Data Analyst va junior Data Scientist rollariga kirish yo'li ko'pincha qisqaroq, chunki ular SQL, statistika va aniq biznes natijasiga tayanadi; ML Engineer va MLOps odatda dasturlash tajribasini, Research esa chuqur matematika va ko'pincha ilmiy darajani kutadi. Bu qat'iy qoida emas — sizning oldingi tajribangiz (masalan, backend dasturchi bo'lsangiz, ML Engineer tabiiy qadam) va mahalliy bozor muhimroq.

2.2. Rolni tanlash — ko'nikmalar bo'shlig'i sifatida

Rolni tanlash — bu optimizatsiya masalasi: qaysi rolning talablari sizning hozirgi ko'nikmalaringizga eng yaqin va qolgan bo'shliqni qancha vaqtda yopish mumkin?

text
1. 20-50 ta vakansiya matnini yig'ing (bitta shahar/bozor, bitta rol nomi)
2. talablarni ajrating: har vakansiyada qaysi ko'nikmalar so'ralgan
3. chastota: har ko'nikma vakansiyalarning qancha ulushida?
4. shaxsiy ro'yxat: qaysilari sizda bor - DALIL bilan (loyiha, ish)
5. bo'shliq: tez-tez so'raladigan, lekin sizda yo'q ko'nikmalar
6. tartib: qaysi ko'nikma eng ko'p vakansiyani "mos" holatga o'tkazadi?
   (chastota bilan bir xil bo'lishi SHART EMAS - 3-misol)

HALOL ESLATMA: 20-50 ta vakansiya - kichik namuna; ulushlar uchun
ishonch oralig'ini ko'ring 11.4-bob. Bir oylik e'lonlar butun bozor emas.

2.3. Rezyume tuzilishi

text
+--------------------------------------------------------------+
| ISM FAMILIYA                                                  |
| Rol (masalan: Data Scientist) | shahar | email | telefon      |
| GitHub | portfolio | LinkedIn yoki boshqa kasbiy profil       |
+--------------------------------------------------------------+
| QISQA XULOSA (2-3 qator): kim, nimada kuchli, nimani izlaydi  |
+--------------------------------------------------------------+
| KO'NIKMALAR: guruhlab (Til / ML / Ma'lumot / Vositalar)       |
+--------------------------------------------------------------+
| TAJRIBA (teskari xronologik): lavozim, tashkilot turi, davr   |
|   - punkt: fe'l + nima + qanday + natija                      |
|   - 2-4 punkt har joyda                                       |
+--------------------------------------------------------------+
| LOYIHALAR (tajriba kam bo'lsa - tajribadan OLDIN):            |
|   nom - 1 qator mazmun - natija - havola                      |
+--------------------------------------------------------------+
| TA'LIM, SERTIFIKATLAR, TILLAR                                 |
+--------------------------------------------------------------+

QOIDALAR:
  1 sahifa (tajriba 10 yildan kam bo'lsa)
  eng kuchli narsa - yuqorida (tajriba yoki loyihalar)
  bir xil format: sanalar, tinish belgilari, shrift
  fayl: PDF, nomi "Ism_Familiya_Data_Scientist.pdf"
  foto, yosh, oilaviy holat - odatda KERAK EMAS (bozorga qarab farq qiladi)

Tajriba yo'q bo'lsa nima yoziladi? Loyihalar bo'limi asosiy bo'ladi. Kurs davomidagi amaliyot darslari (12.10, 13.12, 14.14, 15.14, 27.14, 28.12) va 29.2-29.4 dagi to'liq loyiha — bular haqiqiy ish namunalari, agar siz ularni o'zingizcha kengaytirgan va GitHub da tushunarli qilib joylagan bo'lsangiz 29.6-bob. Stajirovka, ko'ngillilik, universitet loyihasi, freelance buyurtma — hammasi tajriba bo'limiga yoziladi, faqat nima ekanini halol ko'rsating.

2.4. Punkt formulasi: fe'l + nima + qanday + natija

Rezyumedagi eng ko'p xato — vazifani yozish (nima qilishingiz kerak edi) o'rniga natijani yozmaslik (nima qildingiz va nima o'zgardi).

text
YOMON (vazifa):   "Kredit modeli ustida ishladim"
YAXSHI (natija):  "Kredit to'lovi kechikishini bashorat qiluvchi gradient
                   boosting modelini qurdim, ROC-AUC 0.71 dan 0.78 ga oshdi"
                   \______________ NIMA ______________/ \_ QANDAY _/
                   FE'L: qurdim                          NATIJA: 0.71 -> 0.78

INGLIZCHA (fe'l BOSHIDA):
  "Built a churn model in scikit-learn, reducing monthly churn by 1.5 p.p."
O'ZBEKCHA (fe'l odatda OXIRIDA yoki ikki nuqtadan oldin):
  "... modelini qurdim: ROC-AUC 0.71 dan 0.78 ga oshdi"

NATIJA TURLARI:
  sifat      ROC-AUC 0.71 -> 0.78, MAE 12% ga kamaydi
  vaqt       hisobot 6 soatdan 20 daqiqaga
  pul/biznes to'lov ulushi +2.1 foiz punkt (A/B test bilan)
  miqyos     1.2 mln qator, 12 menejer foydalanadi, kuniga 50 ming so'rov
  sifatiy    "birinchi marta avtomatlashtirildi" - raqam bo'lmasa ham aniq

Raqamni to'qimang. Intervyuda har bir raqam haqida "qanday o'lchadingiz? bazaviy qiymat nima edi? qaysi davrda?" deb so'rashadi 29.10-bob. Javob bera olmaydigan raqam — rezyumeni kuchsizlantiradi. O'quv loyihasida natija "bazaviy modelga nisbatan" yoziladi: "bazaviy logistik regressiyaga nisbatan PR-AUC 0.42 dan 0.51 ga (5-fold CV, juftlashgan farq 2*SE dan katta)". Bu kichik, lekin tekshiriladigan da'vo.

"Biz" va "men". Jamoaviy ishda "A/B test o'tkazdik" yozuvi sizning hissangizni yashiradi. Siz aynan nima qildingiz — dizayn, tahlil, kod, taqdimot? "Jamoa bilan" deyish mumkin, lekin fe'l sizniki bo'lsin: "... A/B test dizaynini tuzdim va natijani tahlil qildim".

2.5. Vakansiyani o'qish

text
VAKANSIYA MATNIDA         NIMANI ANGLATADI (odatda)
"Majburiy / Talablar"     filtr: ko'pchiligi bo'lishi kerak, lekin HAMMASI
                          shart emas - ko'p vakansiya "orzu ro'yxati"
"Afzallik / Plus"         bo'lsa yaxshi; yo'qligi rad sababi emas
"Vazifalar"               ENG MUHIM qism - kundalik ish qanday
                          (sarlavhadan ko'ra ishonchliroq)
takrorlangan so'zlar      muhim ko'nikma (masalan, SQL 3 marta)
"tez o'zgaruvchan muhit"  jarayonlar kam, mustaqillik kutiladi
"biznes bilan muloqot"    tushuntirish ko'nikmasi tekshiriladi 29.4-bob

YASHIRIN TALABLAR:
  "kredit riski" -> domen: skoring, nomutanosib sinflar 14.9-bob, kalibrlash 14.10-bob
  "ishlab chiqarishga chiqarish" -> 27-qism: API, Docker, monitoring
  "mahsulot metrikalari" -> A/B test (11-qism, 27.13), kohort tahlili (29.10)

Qachon ariza berish kerak? Aniq foiz qoidasi yo'q. Umumiy maslahat: majburiy talablarning ko'pchiligi sizda dalil bilan bo'lsa va vazifalar sizga tushunarli bo'lsa — ariza bering; yetishmayotgan narsani rezyumeda to'qimang, lekin xatda "X ni hozir o'rganyapman, Y loyihada qo'lladim" deb yozish mumkin.

2.6. ATS (avtomatik saralash) — nima ma'lum, nima noma'lum

ATS (applicant tracking system) — arizalarni qabul qiladigan, saqlaydigan va ko'pincha qidirish/filtrlash imkonini beradigan tizim. Uning atrofida ko'p afsona bor ("rezyumelarning katta qismini robot rad etadi", "oq shrift bilan kalit so'z yozing"). Halol holat:

text
MA'LUM (umumiy tamoyil):
  - ko'p tashkilot arizalarni shunday tizimda yig'adi
  - tizim fayldan MATN ajratadi; murakkab dizayn (jadval, ustunlar,
    rasm ichidagi matn) ajratishda xato berishi mumkin
  - HR mutaxassisi ko'pincha kalit so'z bo'yicha qidiradi yoki filtrlaydi
    ("SQL" va "Python" bor rezyumelar)
  - ba'zi tizimlarda avtomatik savollar ("tajriba necha yil?") bor

NOMA'LUM (va har tizimda har xil):
  - aniq saralash algoritmi, og'irliklar, "ball" formulasi
  - sinonimlarni tushunadimi (sklearn = scikit-learn?)
  - rezyume avtomatik RAD etiladimi yoki faqat tartiblanadimi
  Shuning uchun "ATS ni aldash" maslahatlariga ishonmang.

AMALIY VA XAVFSIZ QOIDALAR (odam uchun ham foydali):
  - oddiy bir ustunli tuzilma, standart bo'lim nomlari
  - vakansiyadagi atamani ishlating (agar u sizda BOR bo'lsa):
    "scikit-learn (sklearn)", "gradient boosting (XGBoost)"
  - matnli PDF (skanerlangan rasm emas)
  - kalit so'zni punktda DALIL bilan: "SQL bilan ... ni avtomatlashtirdim"

1-misolda soddalashtirilgan "qidiruv" quramiz: TF-IDF o'xshashligi va lug'at bo'yicha talab qamrovi. Bu real ATS ning modeli emas — faqat "vakansiya tilida yozish" va "kalit so'z to'ldirish" o'rtasidagi farqni o'lchash vositasi.

2.7. Ish qidirish strategiyasi

Ish qidirish — bu voronka: ariza → javob (HR aloqasi) → intervyu(lar) → taklif. Har bosqichda konversiya bor, va natija ular ko'paytmasi:

text
kutilgan takliflar = ariza soni * p(javob) * p(intervyu) * p(taklif)

MUHIM XULOSALAR (4-misol, faraziy raqamlar bilan):
  1. har qanday bosqichni x1.5 qilish natijani x1.5 qiladi
     -> savol: qaysi bosqichni ARZONROQ yaxshilash mumkin?
  2. bir xil +5 foiz punkt eng PAST konversiyali bosqichda eng ko'p beradi
  3. o'z voronkangizni o'lchang: 70 ta arizada 1 javob - birinchi bosqich
     muammosi; 1 ta intervyudan xulosa chiqarib bo'lmaydi

Kanallar:

text
KANAL              AFZALLIGI                        E'TIBOR
ochiq e'lonlar     ko'p, tez                        raqobat katta, javob kam
tavsiya (referral) ishonch "qarzga" olinadi         tanishlar tarmog'i kerak
kasbiy tarmoq      yashirin vakansiyalar, maslahat  vaqt talab qiladi, halol
                   (meetup, konferensiya, onlayn    bo'ling - faqat "ish so'rash"
                    hamjamiyatlar)                  uchun tanishmang
stajirovka         tajriba + keyin ishga o'tish     ko'pincha qisqa muddatli
                   imkoniyati
freelance          haqiqiy buyurtmachi, portfolio   shartnoma, to'lov, soliq -
                                                    mahalliy qonunni tekshiring
ochiq manba        kodingizni hamma ko'radi,        kichik boshlang: hujjat,
                   tavsiya manbai                   test, kichik xato tuzatish
musobaqalar        ko'nikma isboti 29.5-bob           reyting o'zi ish emas -
                                                    yechimni tushuntiring

Tavsiya xati va kuzatuv. Ariza bilan birga 5-8 gapli xat: nega aynan shu vazifalar, qaysi loyihangiz eng yaqin (havola bilan). Javob bo'lmasa, 1-2 hafta o'tib bitta qisqa, xushmuomala eslatma yuborish odatiy; undan ko'p — yo'q.

Jadval yuriting. Har ariza uchun: sana, tashkilot turi, rol, kanal, rezyume versiyasi, bosqich, keyingi qadam. Bu — sizning shaxsiy ma'lumotlar bazangiz: bir oydan keyin qaysi kanal va qaysi rezyume versiyasi ko'proq javob berishini ko'rasiz (lekin kichik sonlarda ehtiyot bo'ling — 4-misol, 5-bo'lim).

2.8. Mahalliy va xalqaro bozor

Raqamlarsiz, umumiy farqlar (har biri tashkilotga qarab o'zgaradi — tekshiring):

text
                   MAHALLIY BOZOR                  XALQARO (masofaviy)
til                o'zbek va/yoki rus, ba'zan      ingliz - rezyume, intervyu,
                   ingliz (hujjatlar)              kundalik muloqot
rezyume            mahalliy odatlar farq qilishi   1 sahifa, natijaga
                   mumkin (masalan, foto)          yo'naltirilgan, foto yo'q
domen              bank, telekom, chakana savdo,   mahsulot kompaniyalari,
                   davlat xizmatlari, logistika    SaaS, konsalting
intervyu           ko'pincha suhbat + test vazifa  bir necha bosqich: HR,
                                                   texnik, jonli kodlash, case
huquqiy            mehnat shartnomasi              shartnoma turi, soliq,
                                                   to'lov usuli, vaqt zonasi -
                                                   rasmiy manbadan tekshiring
raqobat            mahalliy nomzodlar              butun dunyo nomzodlari

Maosh haqida. Bu darsda maosh raqamlari yo'q — ular tez o'zgaradi va manbaga qarab juda farq qiladi. Joriy ma'lumotni bir necha mustaqil manbadan (e'lonlar, kasbiy hamjamiyat so'rovnomalari, tanishlar) yig'ing va ular ham namuna ekanini unutmang (29.9 dagi tanlash tarafkashligi: o'z maoshini ochiq e'lon qiladiganlar tasodifiy namuna emas).

2.9. Rezyume namunasi

Quyidagi namuna to'qima shaxs uchun yozilgan; ism, tashkilotlar va raqamlar o'ylab topilgan. Tuzilma va punktlar shaklini ko'rsatish uchun.

markdown
# [ISM FAMILIYA] — NAMUNA (to'qima shaxs)
Data Scientist · Toshkent · namuna@example.com · github.com/namuna · namuna.github.io

## Qisqa xulosa
Kredit riski va mijoz ketishi bo'yicha 1.5 yillik tahlil tajribasi. Gradient boosting,
A/B test va SQL bilan biznes metrikasini o'lchab yaxshilashga yo'naltirilgan.
Modelni FastAPI xizmati sifatida ishga tushirish tajribasi bor.

## Ko'nikmalar
- **Til:** Python (pandas, NumPy, scikit-learn), SQL (PostgreSQL)
- **ML:** gradient boosting (XGBoost, LightGBM), logistik regressiya, kalibrlash, permutation importance
- **Statistika:** A/B test, bootstrap, gipoteza testlari, quvvat tahlili
- **Vositalar:** Git, Docker, FastAPI, matplotlib
- **Tillar:** o'zbek (ona tili), rus (erkin), ingliz (B2)

## Tajriba
**Junior Data Analyst** — bank (chakana kredit bo'limi) · 2025.03 — hozirgacha
- Kredit to'lovi kechikishini bashorat qiluvchi gradient boosting modelini qurdim,
  ROC-AUC 0.71 dan 0.78 ga oshdi (vaqt bo'yicha validatsiya, 6 oy)
- Haftalik portfel hisobotini SQL va pandas bilan avtomatlashtirdim,
  tayyorlash vaqti 6 soatdan 20 daqiqaga qisqardi
- SMS eslatma matni uchun A/B test dizaynini tuzdim va natijani tahlil qildim:
  o'z vaqtida to'lov ulushi 2.1 foiz punkt oshdi (p = 0.01, oldindan hisoblangan namuna hajmi)

**Stajyor tahlilchi** — telekom kompaniyasi · 2024.06 — 2024.09
- Mijoz ketishi bo'yicha kohort tahlili qildim va 3 ta xavf segmentini aniqladim;
  saqlash bo'limi ulardan ikkitasi uchun taklif ishga tushirdi

## Loyihalar
- **Talab bashorati va zaxira qarori** — 40 do'kon, rolling-origin backtest;
  bazaviy modelga nisbatan MAE 14% ga past · github.com/namuna/talab
- **Mijoz ketishi xizmati** — scikit-learn + FastAPI + Docker, drift monitoringi
  va avtomatik qayta o'qitish darvozasi · github.com/namuna/churn-service

## Ta'lim
Iqtisodiyot bakalavri — universitet · 2020-2024
Data Science kursi (29 qism) — to'liq, 12 ta amaliy loyiha

Namunada nimaga e'tibor berish kerak: har tajriba punktida fe'l, nima, qanday va raqamli natija bor; raqamlar baza bilan ("0.71 dan 0.78 ga", "6 soatdan 20 daqiqaga"); loyihalarda havola; ko'nikmalar guruhlangan va vakansiyadagi atamalar bilan ("scikit-learn", "gradient boosting (XGBoost)"); ish beruvchilar umumiy nom bilan ("bank", "telekom kompaniyasi").

2.10. Tuzoqlar

Asosiy tuzoqlar: vazifani natija o'rniga yozish ("... ustida ishladim"); raqamsiz yoki bazasiz raqam ("samaradorlikni 10 marta oshirdim"); raqam to'qish; "biz" bilan shaxsiy hissani yashirish; barcha vakansiyaga bir xil rezyume; vakansiya atamasini ishlatmaslik (sklearn va scikit-learn); kalit so'z to'ldirish — dalilsiz uzun ro'yxat; ikki ustunli, jadvalli, rasmli dizayn; 2-3 sahifa (tajriba kam bo'lsa); rolni sarlavha bo'yicha tanlash (vazifalarni o'qimasdan); "ATS ni aldash" hiylalari; bir necha ariza natijasidan "bozor yomon" yoki "rezyume ajoyib" xulosasi — kichik namuna; voronkani o'lchamaslik; faqat ochiq e'lonlar kanaliga tayanish; maosh raqamlarini bitta manbadan olish.


3. Tez ma'lumotnoma

python
import re

from sklearn.feature_extraction.text import TfidfVectorizer

# 1) vakansiya talablari qamrovi (sinonimlar bilan)
LUGAT = {"scikit-learn": r"scikit-learn|\bsklearn\b", "sql": r"\bsql\b|postgres"}
bor = {k for k, p in LUGAT.items() if re.search(p, rezyume.lower())}
qamrov = sum(k in bor for k in majburiy) / len(majburiy)

# 2) TF-IDF o'xshashligi (so'z va harf n-gramlari - o'zbekcha qo'shimchalar uchun)
vek = TfidfVectorizer(analyzer="char_wb", ngram_range=(3, 5)).fit(korpus)
m = vek.transform([vakansiya, rezyume])
oxshash = (m[0] @ m[1].T).toarray()[0, 0]

# 3) punkt tekshiruvi: raqamli natija bormi?
RAQAM = r"\d[\d.,]*\s*(%|foiz|marta|soat|kun|mln|ming)|dan\s+[\d.,]+\s*ga\b"
natijali = bool(re.search(RAQAM, punkt.lower()))

# 4) voronka: kutilgan takliflar
kutilgan = ariza * p_javob * p_intervyu * p_taklif

Rezyume tekshiruv ro'yxati

Tekshiruv Savol
Hajm 1 sahifa? eng kuchli bo'lim yuqorida?
Punkt har punktda fe'l + nima + qanday + natija?
Raqam natija bazaga nisbatanmi? intervyuda tushuntira olasizmi?
Hissa "biz" emas, siz nima qildingiz?
Moslash vakansiyaning majburiy atamalari (sizda bor bo'lsa) matnda bormi?
Dalil muhim ko'nikma natijali punktda yoki loyihada ko'rinadimi?
Format bir ustun, matnli PDF, standart bo'lim nomlari?
Havolalar GitHub va portfolio ishlaydimi, README tushunarlimi (29.6, 29.7)?

Rollar xulosasi

Analyst - "nima bo'ldi, nega?"          SQL, BI, statistika, A/B
Scientist - "nima bo'ladi, nima qilsak?" ML, statistika, tajriba, tushuntirish
ML Engineer - "qanday ishlatamiz?"      Python, PyTorch, API, Docker, test
MLOps - "hayot siklini avtomatlashtirish" CI/CD, registr, monitoring, bulut
Research - "yangi usul"                 matematika, PyTorch, maqolalar
punkt: fe'l + nima + qanday + natija (bazaga nisbatan, to'qimasdan)
voronka: ko'paytma -> eng past va eng arzon yaxshilanadigan bosqich

4. Batafsil misollar

Misollar real numpy/scipy/sklearn bilan (Python 3.14). Har misol mustaqil ishlaydi; vakansiya, rezyume va konversiyalar sintetik yoki faraziy.

Misol 1 — Rezyume va vakansiyani moslash: TF-IDF va talablar qamrovi

python
"""Rezyume va vakansiyani moslash: TF-IDF o'xshashligi va talablar qamrovi."""

import re

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

# kanonik ko'nikma -> sinonimlar (regex); kichik harfda qidiriladi
LUGAT = {
    "python": r"\bpython\b",
    "pandas": r"\bpandas\b",
    "numpy": r"\bnumpy\b",
    "sql": r"\bsql\b|postgres|sqlite|mysql",
    "scikit-learn": r"scikit-learn|\bsklearn\b",
    "gradient boosting": r"gradient boosting|xgboost|lightgbm|catboost|histgradient",
    "a/b test": r"\ba/b\b|\bab test",
    "statistika": r"statistik|gipoteza",
    "vizualizatsiya": r"vizualizatsiya|matplotlib|seaborn|plotly|dashboard",
    "docker": r"\bdocker",
    "git": r"\bgit\b|github",
    "fastapi": r"fastapi",
    "airflow": r"airflow",
    "ingliz tili": r"ingliz|english|ielts",
    "pytorch": r"pytorch|\btorch\b",
}

VAKANSIYA = """Data Scientist (bank, kredit riski bo'limi).
Majburiy: Python (pandas, NumPy), SQL, scikit-learn, gradient boosting modellari,
statistika va A/B test, natijalarni vizualizatsiya qilish, Git.
Afzallik: Docker, FastAPI, Airflow, ingliz tili (texnik hujjatlarni o'qish).
Vazifalar: kredit riskini bashorat qiluvchi modellarni qurish va monitoring,
biznes bo'limlari bilan ishlash, modellarni ishlab chiqarishga chiqarish."""

# rezyumelar: "kon" - ko'nikmalar qatori, "punkt" - tajriba/loyiha punktlari
REZYUMELAR = {
    "A: boshlang'ich": {
        "kon": "Python, sklearn, XGBoost, Excel, PostgreSQL, matplotlib",
        "punkt": [
            "Kredit to'lovlarini kechiktirish bo'yicha model ustida ishladim",
            "Hisobotlar tayyorlashda yordam berdim",
            "Ma'lumotlarni tozalash vazifalari menga yuklatilgan edi",
        ],
    },
    "B: tahrirlangan": {
        "kon": ("Python (pandas, NumPy), SQL (PostgreSQL), scikit-learn, "
                "gradient boosting (XGBoost), statistika, matplotlib, Git, "
                "ingliz tili B2"),
        "punkt": [
            "Kredit to'lovi kechikishini bashorat qiluvchi gradient boosting "
            "modelini qurdim: ROC-AUC 0.71 dan 0.78 ga oshdi",
            "SQL va pandas bilan 1.2 mln qatorli tranzaksiyalardan 40 ta belgi "
            "yaratdim, hisobot tayyorlash vaqti 3 kundan 4 soatga qisqardi",
            "Eslatma SMS matni uchun A/B test o'tkazdim (statistika: 2 ta "
            "proporsiya testi), to'lov ulushi 2.1 foiz punkt oshdi",
            "Loyiha kodini Git da yuritdim, matplotlib bilan dashboard yasadim",
        ],
    },
    "C: kalit so'z to'ldirilgan": {
        "kon": ("Python, pandas, NumPy, SQL, scikit-learn, gradient boosting, "
                "statistika, A/B test, vizualizatsiya, Git, Docker, FastAPI, "
                "Airflow, ingliz tili, kredit riski, monitoring, bank"),
        "punkt": [
            "Kredit riskini bashorat qiluvchi modellarni qurish va monitoring, "
            "biznes bo'limlari bilan ishlash",
            "Modellarni ishlab chiqarishga chiqarish, Docker, FastAPI, Airflow",
        ],
    },
}

# TF-IDF uchun fon korpusi (sintetik vakansiyalar) - IDF ma'noli bo'lishi uchun
FON = [
    "Data Analyst: SQL, Excel, Power BI dashboard, hisobotlar, biznes bilan ishlash",
    "ML Engineer: Python, PyTorch, Docker, Kubernetes, modelni ishlab chiqarishga chiqarish",
    "Data Scientist: Python, statistika, A/B test, mahsulot metrikalari, SQL",
    "MLOps: Docker, Airflow, CI/CD, monitoring, Git, bulut",
    "Junior Data Analyst: pandas, vizualizatsiya, SQL, statistika asoslari",
    "NLP Engineer: PyTorch, transformerlar, matn klassifikatsiyasi, ingliz tili",
]


def konlar(matn):
    """Matnda topilgan kanonik ko'nikmalar (tartiblangan)."""
    t = matn.lower()
    return sorted(k for k, p in LUGAT.items() if re.search(p, t))


def talablar(vak):
    """Vakansiyadan majburiy va afzallik ko'nikmalarini ajratish."""
    maj = vak.split("Majburiy:")[1].split("Afzallik:")[0]
    afz = vak.split("Afzallik:")[1].split("Vazifalar:")[0]
    return konlar(maj), konlar(afz)


def dalil_bor(punktlar, kon):
    """Ko'nikma raqamli natijasi bor punktda tilga olinganmi?"""
    p = LUGAT[kon]
    return any(re.search(p, s.lower()) and re.search(r"\d", s) for s in punktlar)


def main() -> None:
    maj, afz = talablar(VAKANSIYA)
    print("=== 1. Vakansiya talablari (lug'at bo'yicha) ===")
    print(f"  majburiy ({len(maj)}): {', '.join(maj)}")
    print(f"  afzallik ({len(afz)}): {', '.join(afz)}")

    matnlar = {n: r["kon"] + ". " + ". ".join(r["punkt"])
               for n, r in REZYUMELAR.items()}
    korpus = [VAKANSIYA] + FON + list(matnlar.values())
    sozli = TfidfVectorizer(sublinear_tf=True).fit(korpus)
    harfli = TfidfVectorizer(analyzer="char_wb", ngram_range=(3, 5),
                             sublinear_tf=True).fit(korpus)

    def kos(vek, a, b):
        m = vek.transform([a, b])
        return float((m[0] @ m[1].T).toarray()[0, 0])

    print("\n=== 2. Rezyume va vakansiya: o'xshashlik va qamrov ===")
    print(f"  {'rezyume':<27} {'soz TF-IDF':>10} {'harf TF-IDF':>11} "
          f"{'majburiy':>9} {'afzallik':>9} {'dalilli':>8}")
    natija = {}
    for nom, r in REZYUMELAR.items():
        bor = set(konlar(matnlar[nom]))
        qm = sum(k in bor for k in maj) / len(maj)
        qa = sum(k in bor for k in afz) / len(afz)
        dl = sum(dalil_bor(r["punkt"], k) for k in maj) / len(maj)
        s1, s2 = kos(sozli, VAKANSIYA, matnlar[nom]), kos(harfli, VAKANSIYA, matnlar[nom])
        natija[nom] = (s1, s2, qm, qa, dl, bor)
        print(f"  {nom:<27} {s1:>10.3f} {s2:>11.3f} {qm:>9.2f} {qa:>9.2f} {dl:>8.2f}")

    print("\n=== 3. Qoplanmagan talablar ===")
    for nom, (_, _, _, _, _, bor) in natija.items():
        yoq_m = [k for k in maj if k not in bor]
        yoq_a = [k for k in afz if k not in bor]
        dalilsiz = [k for k in maj if k in bor
                    and not dalil_bor(REZYUMELAR[nom]["punkt"], k)]
        print(f"  {nom}")
        print(f"    majburiy yo'q: {', '.join(yoq_m) if yoq_m else '-'}")
        print(f"    afzallik yo'q: {', '.join(yoq_a) if yoq_a else '-'}")
        print(f"    bor, lekin natijali punktda yo'q: "
              f"{', '.join(dalilsiz) if dalilsiz else '-'}")

    print("\n=== 4. Sinonimsiz (aniq so'z) qidiruv nimani yo'qotadi? ===")
    a_matn = matnlar["A: boshlang'ich"].lower()
    for kon in maj:
        aniq = kon in a_matn
        sinonim = bool(re.search(LUGAT[kon], a_matn))
        if aniq != sinonim:
            print(f"  A rezyumesida '{kon}': aniq so'z {aniq}, sinonim bilan {sinonim}")

    print("\n=== 5. Xulosa (natijadan hisoblangan) ===")
    a, b, c = (natija[k] for k in REZYUMELAR)
    if c[0] > b[0]:
        print(f"  C ning so'z o'xshashligi B dan yuqori ({c[0]:.3f} > {b[0]:.3f}),")
        print(f"  lekin dalilli qamrov past ({c[4]:.2f} < {b[4]:.2f}) - "
              "o'xshashlik sifat emas")
    else:
        print(f"  B ning so'z o'xshashligi C dan yuqori yoki teng ({b[0]:.3f})")
    print(f"  A -> B: majburiy qamrov {a[2]:.2f} -> {b[2]:.2f}, "
          f"dalilli {a[4]:.2f} -> {b[4]:.2f}")
    print("  ⭐ Moslash = haqiqiy tajribani vakansiya tilida yozish, to'qish emas")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Vakansiya talablari (lug'at bo'yicha) ===
  majburiy (10): a/b test, git, gradient boosting, numpy, pandas, python, scikit-learn, sql, statistika, vizualizatsiya
  afzallik (4): airflow, docker, fastapi, ingliz tili

=== 2. Rezyume va vakansiya: o'xshashlik va qamrov ===
  rezyume                     soz TF-IDF harf TF-IDF  majburiy  afzallik  dalilli
  A: boshlang'ich                  0.071       0.174      0.50      0.00     0.00
  B: tahrirlangan                  0.237       0.263      1.00      0.25     0.50
  C: kalit so'z to'ldirilgan       0.795       0.732      1.00      1.00     0.00

=== 3. Qoplanmagan talablar ===
  A: boshlang'ich
    majburiy yo'q: a/b test, git, numpy, pandas, statistika
    afzallik yo'q: airflow, docker, fastapi, ingliz tili
    bor, lekin natijali punktda yo'q: gradient boosting, python, scikit-learn, sql, vizualizatsiya
  B: tahrirlangan
    majburiy yo'q: -
    afzallik yo'q: airflow, docker, fastapi
    bor, lekin natijali punktda yo'q: git, numpy, python, scikit-learn, vizualizatsiya
  C: kalit so'z to'ldirilgan
    majburiy yo'q: -
    afzallik yo'q: -
    bor, lekin natijali punktda yo'q: a/b test, git, gradient boosting, numpy, pandas, python, scikit-learn, sql, statistika, vizualizatsiya

=== 4. Sinonimsiz (aniq so'z) qidiruv nimani yo'qotadi? ===
  A rezyumesida 'gradient boosting': aniq so'z False, sinonim bilan True
  A rezyumesida 'scikit-learn': aniq so'z False, sinonim bilan True
  A rezyumesida 'vizualizatsiya': aniq so'z False, sinonim bilan True

=== 5. Xulosa (natijadan hisoblangan) ===
  C ning so'z o'xshashligi B dan yuqori (0.795 > 0.237),
  lekin dalilli qamrov past (0.00 < 0.50) - o'xshashlik sifat emas
  A -> B: majburiy qamrov 0.50 -> 1.00, dalilli 0.00 -> 0.50
  ⭐ Moslash = haqiqiy tajribani vakansiya tilida yozish, to'qish emas

Natija tahlili.

1-bo'lim — lug'at vakansiyadan 10 ta majburiy va 4 ta afzallik ko'nikmasini ajratdi. Bu "qidiruv" ning birinchi qadami: talablar ro'yxati aniq bo'lmasa, moslikni o'lchab bo'lmaydi. E'tibor bering: "kredit riski" yoki "biznes bo'limlari bilan ishlash" lug'atda yo'q — ular ham talab, lekin kalit so'z bilan emas, punkt mazmuni bilan ko'rsatiladi.

2-bo'lim — uch rezyume. A (boshlang'ich) vakansiyaga eng kam o'xshash: so'z TF-IDF 0.071, majburiy qamrov 0.50, dalilli qamrov 0.00 — birorta majburiy ko'nikma raqamli natijasi bor punktda tilga olinmagan. B (tahrirlangan) — xuddi shu odam, xuddi shu tajriba, lekin vakansiya tilida va natija bilan yozilgan: majburiy qamrov 1.00, dalilli 0.50, o'xshashlik 0.237. C (kalit so'z to'ldirilgan) vakansiya jumlalarini deyarli ko'chirib olgan: o'xshashlik 0.795 — B dan uch barobardan ko'p, afzallik qamrovi ham 1.00. Lekin dalilli qamrov 0.00: biror ko'nikma natija bilan ko'rsatilmagan.

Harf n-gramli TF-IDF so'zlikdan farq qiladi: A uchun 0.174 (so'zlikda 0.071). O'zbek tili agglyutinativ — "model", "modelini", "modellarni" so'zlik TF-IDF uchun uch xil so'z, harf n-gramlari esa umumiy "model" bo'lagini ushlaydi. Shuning uchun o'zbekcha matnda harf n-gramlari adolatliroq o'xshashlik beradi (23-qismdagi subword g'oyasiga o'xshash).

3-bo'lim — qaysi talab qoplanmagan. A da a/b test, git, numpy, pandas, statistika yo'q — lekin bu odam ularni bilardi (B da ular bor); u shunchaki yozmagan. B da majburiylarning hammasi bor, afzallikdan airflow, docker, fastapi yo'q — va bu halol: nomzod ularni bilmaydi, rezyumeda to'qimagan. Uchinchi qator eng foydali: B da git, numpy, python, scikit-learn, vizualizatsiya ro'yxatda bor, lekin natijali punktda ko'rinmaydi. Masalan, "scikit-learn" ni gradient boosting punktiga qo'shish ("scikit-learn va XGBoost bilan ...") dalilni kuchaytiradi.

4-bo'lim — sinonimsiz qidiruv. Agar qidiruv faqat aniq so'zni izlasa, A rezyumesida gradient boosting (XGBoost yozilgan), scikit-learn (sklearn) va vizualizatsiya (matplotlib) topilmaydi. Real tizim sinonimlarni tushunadimi — noma'lum 2.6-bob, shuning uchun xavfsiz yo'l: vakansiya atamasi va o'zingizning atamangizni birga yozish — "scikit-learn (sklearn)".

5-bo'lim — asosiy saboq natijadan hisoblandi: C ning o'xshashligi B dan yuqori (0.795 > 0.237), lekin dalilli qamrov past (0.00 < 0.50). O'xshashlik — matnlar qanchalik bir xil so'zlardan iboratligi, sifat emas. Odam (HR yoki texnik intervyuer) C ni o'qiganda "bu vakansiya matnining nusxasi" deb darhol ko'radi. Moslash — haqiqiy tajribani vakansiya tilida yozish, yangi tajriba to'qish emas.

Misol 2 — Rezyume punktlarini qoidaviy tahlil

python
"""Rezyume punktlarini qoidaviy tahlil: fe'l, raqamli natija, vosita, uzunlik, passiv."""

import re

import numpy as np

FEL_UZ = ["qurdim", "ishlab chiqdim", "kamaytirdim", "oshirdim", "yaratdim",
          "avtomatlashtirdim", "joriy qildim", "tahlil qildim", "o'tkazdim",
          "optimallashtirdim", "qisqartirdim", "chiqardim", "tayyorladim",
          "boshqardim", "yozdim"]
FEL_EN = ["built", "reduced", "designed", "automated", "deployed", "increased",
          "analyzed", "led", "developed", "cut", "improved", "created"]
PASSIV = ["yordam berdim", "ishtirok etdim", "mas'ul edim", "yuklatilgan",
          "ustida ishladim", "shug'ullandim", "tanishman", "vazifalarimga",
          "responsible for", "worked on", "helped", "assisted", "involved in",
          "duties included"]
VOSITA = r"python|sql|pandas|sklearn|scikit|xgboost|lightgbm|docker|fastapi|" \
         r"airflow|pytorch|a/b|gradient boosting|logistik|tf-idf|dashboard|" \
         r"bootstrap|random forest"
RAQAM = (r"\d[\d.,]*\s*(%|foiz|marta|soat|kun|daqiqa|mln|ming|ta\b|x\b)"
         r"|dan\s+[\d.,]+\s*(%|foiz|soat|kun|daqiqa|mln|ming)?\s*ga\b"
         r"|from\s+[\d.,]+\s*\S*\s+to\s+[\d.,]+|by\s+\d")

# (yomon, yaxshi) juftlari - bir xil tajriba, ikki xil yozuv
JUFTLAR = [
    ("Kredit modeli ustida ishladim",
     "Kredit to'lovi kechikishini bashorat qiluvchi gradient boosting modelini "
     "qurdim, ROC-AUC 0.71 dan 0.78 ga oshdi"),
    ("Hisobotlar tayyorlashda yordam berdim",
     "Haftalik savdo hisobotini SQL va pandas bilan avtomatlashtirdim, "
     "tayyorlash vaqti 6 soatdan 20 daqiqaga qisqardi"),
    ("Ma'lumotlarni tozalash vazifalari menga yuklatilgan edi",
     "Tranzaksiyalar jadvalidagi takror va xato yozuvlarni topuvchi pandas "
     "skriptini yozdim, xato yozuvlar ulushi 4.2% dan 0.3% ga tushdi"),
    ("Jamoa bilan A/B test o'tkazdik va natijalarni ko'rib chiqdik",
     "SMS eslatma matni uchun A/B test dizaynini tuzdim va natijani "
     "tahlil qildim: to'lov ulushi 2.1 foiz punkt oshdi (p = 0.01)"),
    ("Responsible for machine learning models and data pipelines",
     "Built a churn model in scikit-learn and deployed it with FastAPI, "
     "reducing monthly churn by 1.5 percentage points"),
    ("Worked on dashboards",
     "Designed a sales dashboard in Python used by 12 regional managers, "
     "cutting ad-hoc report requests from 30 to 8 per month"),
]
# shakli "mukammal", mazmuni noaniq - qoidalar chegarasini ko'rsatish uchun
TOZA = "muammo yo'q"
BOSH = "Python bilan samaradorlikni 10 marta oshirdim va 100% natijaga erishdim"


def tahlil(s):
    t = s.lower()
    en = bool(re.match(r"[a-z]", t)) and any(w in t.split() for w in ["the", "a", "in", "with", "and", "on", "for"])
    if en:
        fel = t.split()[0] in FEL_EN
    else:
        fel = any(f in t for f in FEL_UZ)
    raqam = bool(re.search(RAQAM, t))
    vosita = bool(re.search(VOSITA, t))
    n = len(s.split())
    passiv = [p for p in PASSIV if p in t]
    biz = bool(re.search(r"\b\w+(dik|dikmi)\b", t)) or " we " in f" {t} "
    ball = (2 * fel + 2 * raqam + vosita + (10 <= n <= 35)
            + (not passiv) - biz)
    belgi = []
    if not fel:
        belgi.append("faol fe'l yo'q")
    if not raqam:
        belgi.append("natija raqamsiz")
    if not vosita:
        belgi.append("vosita/usul yo'q")
    if not 10 <= n <= 35:
        belgi.append(f"uzunlik {n} so'z")
    if passiv:
        belgi.append("passiv: " + passiv[0])
    if biz:
        belgi.append("'biz' - shaxsiy hissa noaniq")
    return int(ball), belgi, n


def main() -> None:
    print("=== 1. Juftlar: yomon va yaxshi yozuv (maks ball 7) ===")
    yomon, yaxshi = [], []
    sabablar = {}
    for i, (a, b) in enumerate(JUFTLAR, 1):
        ba, fa, _ = tahlil(a)
        bb, fb, _ = tahlil(b)
        yomon.append(ba)
        yaxshi.append(bb)
        for f in fa:
            k = "uzunlik" if f.startswith("uzunlik") else f.split(":")[0]
            sabablar[k] = sabablar.get(k, 0) + 1
        print(f"  {i}. yomon  {ba}/7  {'; '.join(fa) if fa else TOZA}")
        print(f"     yaxshi {bb}/7  {'; '.join(fb) if fb else TOZA}")

    print("\n=== 2. Juftlashgan farq ===")
    d = np.array(yaxshi) - np.array(yomon)
    se = d.std(ddof=1) / np.sqrt(len(d))
    print(f"  o'rtacha ball: yomon {np.mean(yomon):.2f}, yaxshi {np.mean(yaxshi):.2f}")
    print(f"  farq {d.mean():+.2f} (SE {se:.2f}), sezilarli: {d.mean() > 2 * se}")

    print("\n=== 3. Yomon punktlarda eng ko'p uchragan muammolar ===")
    for k, v in sorted(sabablar.items(), key=lambda x: (-x[1], x[0])):
        print(f"  {k:<30} {v}/{len(JUFTLAR)}")

    print("\n=== 4. Qoidalar chegarasi: shakli to'g'ri, mazmuni bo'sh ===")
    b, f, n = tahlil(BOSH)
    print(f"  '{BOSH}'")
    print(f"  ball {b}/7, belgilar: {'; '.join(f) if f else TOZA}")
    if b >= np.mean(yaxshi):
        print("  qoidalar buni 'yaxshi' deb baholadi - lekin nima, qaysi")
        print("  metrika, qanday bazaga nisbatan? Qoida shaklni, odam mazmunni tekshiradi")

    print("\n=== 5. Xulosa ===")
    if d.mean() > 2 * se:
        print(f"  qayta yozish har juftda ballni oshirdi: min farq {d.min():+d}, "
              f"maks {d.max():+d}")
    print("  ⭐ Formula: fe'l + nima + qanday + o'lchanadigan natija (bazaga nisbatan)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Juftlar: yomon va yaxshi yozuv (maks ball 7) ===
  1. yomon  0/7  faol fe'l yo'q; natija raqamsiz; vosita/usul yo'q; uzunlik 4 so'z; passiv: ustida ishladim
     yaxshi 7/7  muammo yo'q
  2. yomon  0/7  faol fe'l yo'q; natija raqamsiz; vosita/usul yo'q; uzunlik 4 so'z; passiv: yordam berdim
     yaxshi 7/7  muammo yo'q
  3. yomon  0/7  faol fe'l yo'q; natija raqamsiz; vosita/usul yo'q; uzunlik 6 so'z; passiv: yuklatilgan
     yaxshi 7/7  muammo yo'q
  4. yomon  1/7  faol fe'l yo'q; natija raqamsiz; uzunlik 9 so'z; 'biz' - shaxsiy hissa noaniq
     yaxshi 7/7  muammo yo'q
  5. yomon  0/7  faol fe'l yo'q; natija raqamsiz; vosita/usul yo'q; uzunlik 8 so'z; passiv: responsible for
     yaxshi 7/7  muammo yo'q
  6. yomon  1/7  faol fe'l yo'q; natija raqamsiz; uzunlik 3 so'z; passiv: worked on
     yaxshi 7/7  muammo yo'q

=== 2. Juftlashgan farq ===
  o'rtacha ball: yomon 0.33, yaxshi 7.00
  farq +6.67 (SE 0.21), sezilarli: True

=== 3. Yomon punktlarda eng ko'p uchragan muammolar ===
  faol fe'l yo'q                 6/6
  natija raqamsiz                6/6
  uzunlik                        6/6
  passiv                         5/6
  vosita/usul yo'q               4/6
  'biz' - shaxsiy hissa noaniq   1/6

=== 4. Qoidalar chegarasi: shakli to'g'ri, mazmuni bo'sh ===
  'Python bilan samaradorlikni 10 marta oshirdim va 100% natijaga erishdim'
  ball 7/7, belgilar: muammo yo'q
  qoidalar buni 'yaxshi' deb baholadi - lekin nima, qaysi
  metrika, qanday bazaga nisbatan? Qoida shaklni, odam mazmunni tekshiradi

=== 5. Xulosa ===
  qayta yozish har juftda ballni oshirdi: min farq +6, maks +7
  ⭐ Formula: fe'l + nima + qanday + o'lchanadigan natija (bazaga nisbatan)

Natija tahlili.

1-bo'lim — oltita juft: bir xil tajriba, ikki xil yozuv. Yomon punktlar 0/7 yoki 1/7, yaxshilari 7/7. Muammolar ro'yxati har yomon punkt uchun aniq nima yetishmasligini ko'rsatadi: "Kredit modeli ustida ishladim" — faol fe'l yo'q, natija raqamsiz, vosita yo'q, 4 so'z, passiv ibora ("ustida ishladim"). Inglizcha punktlar ham xuddi shu qoidalar bilan tekshirildi, faqat fe'l boshida qidiriladi ("Built ...", "Designed ...") — 2.4 dagi farq.

2-bo'lim — juftlashgan farq: o'rtacha 0.33 dan 7.00 ga, farq +6.67 (SE 0.21), 2*SE dan ancha katta. Halol eslatma: yaxshi punktlar formulaga qarab yozilgan, shuning uchun 7/7 kutilgan natija — bu tekshiruvchi "yaxshi" punktni emas, formulaga mos punktni topadi. Uning foydasi — o'z rezyumengizdagi punktlarni tez skanerlab, qaysi biri formulaga umuman mos emasligini ko'rsatish.

3-bo'lim — yomon punktlarda eng ko'p uchragan muammolar: faol fe'l yo'q (6/6), natija raqamsiz (6/6), uzunlik chegaradan tashqarida (6/6 — hammasi juda qisqa), passiv ibora (5/6). Bu tasodif emas: "vazifa yozish" uslubida bu to'rt muammo doim birga keladi. Bitta qoidani tuzatish (masalan, raqam qo'shish) yetmaydi — punktni butunlay qayta qurish kerak.

4-bo'lim — qoidalar chegarasi. "Python bilan samaradorlikni 10 marta oshirdim va 100% natijaga erishdim" — 7/7, hech qanday muammo topilmadi. Lekin bu punkt bo'sh: qanday samaradorlik? nimaning 10 marta? qaysi bazaga nisbatan? "100% natija" nima? Intervyuda birinchi savoldayoq yiqiladi. Qoidaviy tekshiruv — shakl filtri; mazmunni odam tekshiradi. Vazifa 4 da "bazaga nisbatan" qoidasini qo'shib, bunday punktni ushlashga harakat qilamiz — lekin har qanday qoidani "aldash" mumkin, shuning uchun oxirgi tekshiruvchi — o'zingizning halolligingiz.

5-bo'lim — qayta yozish har juftda ballni oshirdi: eng kichik farq +6, eng katta +7.

Misol 3 — Ko'nikmalar bo'shlig'i: sintetik vakansiyalar to'plami

python
"""Ko'nikmalar bo'shlig'i: sintetik vakansiyalar to'plamidan talab va shaxsiy farq."""

import re

import numpy as np

# ko'nikma -> matnda yozilish variantlari (generator ishlatadi)
VARIANT = {
    "python": ["Python", "Python 3"],
    "sql": ["SQL", "PostgreSQL", "murakkab SQL so'rovlari"],
    "pandas": ["pandas"],
    "numpy": ["NumPy"],
    "excel": ["Excel", "MS Excel"],
    "bi": ["Power BI", "Tableau", "BI vositalari"],
    "statistika": ["statistika", "matematik statistika", "gipoteza testlari"],
    "a/b test": ["A/B test", "A/B testlar"],
    "vizualizatsiya": ["vizualizatsiya", "matplotlib", "grafiklar bilan ishlash"],
    "scikit-learn": ["scikit-learn", "sklearn"],
    "gradient boosting": ["gradient boosting", "XGBoost", "LightGBM", "CatBoost"],
    "pytorch": ["PyTorch", "torch"],
    "nlp": ["NLP", "matn bilan ishlash"],
    "docker": ["Docker"],
    "kubernetes": ["Kubernetes", "k8s"],
    "airflow": ["Airflow"],
    "git": ["Git", "GitHub"],
    "fastapi": ["FastAPI", "REST API"],
    "bulut": ["bulut platformalari", "cloud"],
    "spark": ["Spark", "PySpark"],
    "ingliz tili": ["ingliz tili", "English"],
}
# ajratuvchi lug'at (tahlilchi yozadi) - ataylab to'liq emas: "k8s",
# "REST API", "grafiklar bilan ishlash", "cloud" yo'q
LUGAT = {
    "python": r"\bpython\b", "sql": r"\bsql\b|postgres", "pandas": r"pandas",
    "numpy": r"numpy", "excel": r"excel", "bi": r"power bi|tableau|\bbi\b",
    "statistika": r"statistik|gipoteza", "a/b test": r"a/b",
    "vizualizatsiya": r"vizualizatsiya|matplotlib",
    "scikit-learn": r"scikit|sklearn",
    "gradient boosting": r"gradient boosting|xgboost|lightgbm|catboost",
    "pytorch": r"pytorch|\btorch\b", "nlp": r"\bnlp\b|matn bilan",
    "docker": r"docker", "kubernetes": r"kubernetes", "airflow": r"airflow",
    "git": r"\bgit\b|github", "fastapi": r"fastapi", "bulut": r"bulut",
    "spark": r"spark", "ingliz tili": r"ingliz|english",
}
# rol -> (ulush, {ko'nikma: talab ehtimoli}) - FARAZIY, biz belgilaganmiz
ROLLAR = {
    "Data Analyst": (0.40, {"sql": 0.9, "excel": 0.7, "bi": 0.6, "python": 0.6,
                            "pandas": 0.4, "statistika": 0.5, "a/b test": 0.3,
                            "vizualizatsiya": 0.6, "ingliz tili": 0.3, "git": 0.1}),
    "Data Scientist": (0.30, {"python": 0.95, "sql": 0.8, "pandas": 0.7,
                              "numpy": 0.4, "statistika": 0.7, "a/b test": 0.4,
                              "scikit-learn": 0.7, "gradient boosting": 0.5,
                              "pytorch": 0.3, "nlp": 0.2, "git": 0.5,
                              "docker": 0.3, "vizualizatsiya": 0.4,
                              "ingliz tili": 0.5, "spark": 0.15}),
    "ML Engineer": (0.20, {"python": 0.95, "pytorch": 0.6, "docker": 0.7,
                           "kubernetes": 0.4, "git": 0.8, "fastapi": 0.5,
                           "sql": 0.5, "scikit-learn": 0.4, "bulut": 0.5,
                           "nlp": 0.3, "ingliz tili": 0.6, "airflow": 0.2}),
    "MLOps": (0.10, {"python": 0.8, "docker": 0.9, "kubernetes": 0.7,
                     "airflow": 0.5, "git": 0.9, "bulut": 0.7, "fastapi": 0.3,
                     "spark": 0.2, "ingliz tili": 0.6}),
}
KON = "ko'nikma"
MENIKI = {"python", "sql", "pandas", "numpy", "statistika", "scikit-learn",
          "vizualizatsiya", "git"}


def yarat(rng, n):
    nomlar = list(ROLLAR)
    ulush = np.array([ROLLAR[r][0] for r in nomlar])
    vak = []
    for _ in range(n):
        rol = nomlar[rng.choice(len(nomlar), p=ulush)]
        talab = sorted(k for k, p in ROLLAR[rol][1].items() if rng.random() < p)
        qism = [VARIANT[k][rng.integers(len(VARIANT[k]))] for k in talab]
        rng.shuffle(qism)
        matn = f"{rol}. Talablar: " + ", ".join(qism) + "."
        vak.append((rol, set(talab), matn))
    return vak


def ajrat(matn):
    t = matn.lower()
    return {k for k, p in LUGAT.items() if re.search(p, t)}


def mos_ulush(vak, konlar, chegara=0.8):
    """Vakansiya talablarining kamida 80% i bor bo'lgan vakansiyalar ulushi."""
    ok = [len(t & konlar) / len(t) >= chegara for t in vak if t]
    return float(np.mean(ok))


def main() -> None:
    rng = np.random.default_rng(29)
    vak = yarat(rng, 600)
    print("=== 1. Sintetik vakansiyalar (ehtimollar faraziy, real bozor EMAS) ===")
    for rol in ROLLAR:
        print(f"  {rol:<15} {sum(v[0] == rol for v in vak):>4} ta")
    print(f"  namuna: {vak[0][2]}")

    print("\n=== 2. Ajratuvchi sifati (haqiqiy talablar ma'lum) ===")
    tp = fp = fn = 0
    otkazdi = {}
    for _, haq, matn in vak:
        top = ajrat(matn)
        tp += len(top & haq)
        fp += len(top - haq)
        fn += len(haq - top)
        for k in haq - top:
            otkazdi[k] = otkazdi.get(k, 0) + 1
    print(f"  precision {tp / (tp + fp):.3f}, recall {tp / (tp + fn):.3f}")
    for k, v in sorted(otkazdi.items(), key=lambda x: (-x[1], x[0])):
        print(f"  o'tkazib yuborilgan: {k:<15} {v:>4} marta")

    ds = [ajrat(m) for r, _, m in vak if r == "Data Scientist"]
    ds_haq = [h for r, h, _ in vak if r == "Data Scientist"]
    n = len(ds)
    print(f"\n=== 3. Data Scientist vakansiyalari (n={n}): talab va shaxsiy farq ===")
    print(f"  {KON:<18} {'ulush':>6} {'95% CI':>13} {'haqiqiy':>8} {'menda':>6}")
    chastota = {}
    for k in LUGAT:
        p = np.mean([k in s for s in ds])
        chastota[k] = p
    for k, p in sorted(chastota.items(), key=lambda x: (-x[1], x[0])):
        if p < 0.1:
            continue
        se = np.sqrt(p * (1 - p) / n)
        h = np.mean([k in s for s in ds_haq])
        print(f"  {k:<18} {p:>6.2f} [{max(0, p - 2 * se):.2f}, {min(1, p + 2 * se):.2f}]"
              f" {h:>8.2f} {'ha' if k in MENIKI else '-':>6}")

    print("\n=== 4. Qaysi ko'nikmani keyin o'rganish kerak? ===")
    boshi = mos_ulush(ds, MENIKI)
    print(f"  hozir mos (talablarning >=80% i bor) vakansiyalar: {boshi:.3f}")
    nomzod = sorted(k for k in LUGAT if k not in MENIKI)
    chast_tartib = sorted(nomzod, key=lambda k: (-chastota[k], k))[:3]
    kon, ochko = set(MENIKI), boshi
    ochko_ch = []
    for k in chast_tartib:
        kon.add(k)
        ochko_ch.append(mos_ulush(ds, kon))
    kon, ochko_g, tanlov_g = set(MENIKI), [], []
    for _ in range(3):
        eng = max(nomzod, key=lambda k: (mos_ulush(ds, kon | {k}), -nomzod.index(k))
                  if k not in kon else (-1, 0))
        kon.add(eng)
        tanlov_g.append(eng)
        ochko_g.append(mos_ulush(ds, kon))
    print(f"  chastota bo'yicha: {' -> '.join(chast_tartib)}")
    print(f"    mos ulush: {' -> '.join(f'{x:.3f}' for x in ochko_ch)}")
    print(f"  qamrov bo'yicha (ochko'z): {' -> '.join(tanlov_g)}")
    print(f"    mos ulush: {' -> '.join(f'{x:.3f}' for x in ochko_g)}")

    print("\n=== 5. Xulosa (natijadan hisoblangan) ===")
    birinchi = tanlov_g[0]
    print(f"  birinchi o'rganiladigan: {birinchi} "
          f"(mos ulush {boshi:.3f} -> {ochko_g[0]:.3f})")
    if tanlov_g != chast_tartib:
        print("  chastota va qamrov tartibi farq qiladi - 'eng ko'p so'raladigan'")
        print("  har doim 'eng ko'p eshik ochadigan' emas")
    else:
        print("  bu ma'lumotda chastota va qamrov tartibi bir xil")
    print("  ⭐ Ma'lumot sintetik: xulosa biz bergan ehtimollarni aks ettiradi")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Sintetik vakansiyalar (ehtimollar faraziy, real bozor EMAS) ===
  Data Analyst     242 ta
  Data Scientist   191 ta
  ML Engineer      110 ta
  MLOps             57 ta
  namuna: Data Analyst. Talablar: SQL, grafiklar bilan ishlash, Power BI, English, Python 3, MS Excel, gipoteza testlari, pandas.

=== 2. Ajratuvchi sifati (haqiqiy talablar ma'lum) ===
  precision 1.000, recall 0.943
  o'tkazib yuborilgan: vizualizatsiya    74 marta
  o'tkazib yuborilgan: kubernetes        48 marta
  o'tkazib yuborilgan: bulut             47 marta
  o'tkazib yuborilgan: fastapi           40 marta

=== 3. Data Scientist vakansiyalari (n=191): talab va shaxsiy farq ===
  ko'nikma            ulush        95% CI  haqiqiy  menda
  python               0.97 [0.95, 1.00]     0.97     ha
  sql                  0.83 [0.77, 0.88]     0.83     ha
  scikit-learn         0.73 [0.67, 0.80]     0.73     ha
  pandas               0.71 [0.64, 0.77]     0.71     ha
  statistika           0.69 [0.62, 0.75]     0.69     ha
  ingliz tili          0.55 [0.48, 0.63]     0.55      -
  git                  0.47 [0.40, 0.54]     0.47     ha
  gradient boosting    0.47 [0.39, 0.54]     0.47      -
  a/b test             0.42 [0.35, 0.49]     0.42      -
  numpy                0.39 [0.32, 0.46]     0.39     ha
  vizualizatsiya       0.28 [0.22, 0.35]     0.42     ha
  docker               0.28 [0.21, 0.34]     0.28      -
  pytorch              0.23 [0.17, 0.29]     0.23      -
  nlp                  0.19 [0.13, 0.25]     0.19      -
  spark                0.15 [0.10, 0.20]     0.15      -

=== 4. Qaysi ko'nikmani keyin o'rganish kerak? ===
  hozir mos (talablarning >=80% i bor) vakansiyalar: 0.225
  chastota bo'yicha: ingliz tili -> gradient boosting -> a/b test
    mos ulush: 0.424 -> 0.613 -> 0.817
  qamrov bo'yicha (ochko'z): ingliz tili -> a/b test -> gradient boosting
    mos ulush: 0.424 -> 0.644 -> 0.817

=== 5. Xulosa (natijadan hisoblangan) ===
  birinchi o'rganiladigan: ingliz tili (mos ulush 0.225 -> 0.424)
  chastota va qamrov tartibi farq qiladi - 'eng ko'p so'raladigan'
  har doim 'eng ko'p eshik ochadigan' emas
  ⭐ Ma'lumot sintetik: xulosa biz bergan ehtimollarni aks ettiradi

Natija tahlili.

1-bo'lim — 600 ta sintetik vakansiya: Data Analyst 242, Data Scientist 191, ML Engineer 110, MLOps 57. Rollar ulushi va har ko'nikmaning talab ehtimoli biz tomonimizdan berilgan (faraziy) — bu real bozor haqida hech narsa demaydi. Misolning maqsadi — usulni ko'rsatish: xuddi shu kodni o'zingiz yig'gan haqiqiy e'lonlar matniga qo'llaysiz.

2-bo'lim — ajratuvchining sifati. Sintetik ma'lumotning afzalligi: haqiqiy talablar ma'lum, shuning uchun lug'atning xatosini o'lchay olamiz. Precision 1.000 (topgan narsasi doim to'g'ri), recall 0.943 — har 100 ta talabdan ~6 tasi o'tkazib yuborildi. Qaysilari: vizualizatsiya (74 marta — "grafiklar bilan ishlash" lug'atda yo'q), kubernetes (48 — "k8s"), bulut (47 — "cloud"), fastapi (40 — "REST API"). Haqiqiy e'lonlarda bu muammo kattaroq: atamalar, xatolar, uch tildagi yozuvlar. Ajratuvchini tekshirmasdan chastota jadvaliga ishonish — 06-qismdagi "ma'lumot sifatini tekshirmasdan tahlil" xatosi.

3-bo'lim — Data Scientist vakansiyalarida (n=191) ko'nikmalar ulushi va 95% oraliq. Eng ko'p so'raladiganlar: python 0.97, sql 0.83, scikit-learn 0.73, pandas 0.71, statistika 0.69 — hammasi "menda" bor. Bo'shliq: ingliz tili (0.55), gradient boosting (0.47), a/b test (0.42), docker (0.28). "Haqiqiy" ustuni ajratuvchi xatosining oqibatini ko'rsatadi: vizualizatsiya ulushi 0.28, haqiqiy qiymati esa 0.42 — lug'at sinonimni bilmagani uchun ko'nikma kam talab qilinadigandek ko'rinadi. Qolgan ko'nikmalarda farq yo'q. Oraliqlar kengligiga ham qarang: gradient boosting [0.39, 0.54] va a/b test [0.35, 0.49] ustma-ust tushadi — 191 vakansiyada ularning tartibi ishonchli emas.

4-bo'lim — qaysi ko'nikmani keyin o'rganish kerak? Hozir mos vakansiyalar (talablarning kamida 80% i bor) — 0.225. Chastota bo'yicha tartib: ingliz tili → gradient boosting → a/b test, mos ulush 0.424 → 0.613 → 0.817. Qamrov bo'yicha ochko'z tanlov: ingliz tili → a/b test → gradient boosting, 0.424 → 0.644 → 0.817. Ikkinchi qadamda a/b test kamroq so'ralsa ham ko'proq vakansiyani "mos" holatga o'tkazdi (0.644 va 0.613) — chunki u ko'pincha nomzodda qolgan talablar kam bo'lgan vakansiyalarda uchraydi. Uchinchi qadamdan keyin ikkala yo'l bir joyga keladi (0.817).

5-bo'lim — xulosa natijadan: birinchi o'rganiladigan — ingliz tili (0.225 → 0.424). Halol baho: ikkinchi qadamdagi farq 0.031, ya'ni 191 vakansiyadan ~6 tasi — kichik va boshqa namunada o'zgarishi mumkin. Asosiy saboq aniq raqamda emas, savolda: "eng ko'p so'raladigan ko'nikma qaysi?" emas, "qaysi ko'nikma eng ko'p eshikni ochadi?" — bu savolga javob ko'nikmalarning birga uchrashiga bog'liq. Va yana bir marta: ma'lumot sintetik — xulosa biz bergan ehtimollarni aks ettiradi.

Misol 4 — Ariza voronkasi: faraziy konversiyalar bilan simulyatsiya

python
"""Ariza voronkasi: faraziy konversiyalar bilan simulyatsiya va tor joyni topish."""

import numpy as np
from scipy import stats

HAFTA = 8
N_SIM = 20_000
# FARAZIY konversiyalar - real bozor raqamlari emas, faqat mexanizmni ko'rsatish uchun
BAZA = {"ariza": 16, "javob": 0.06, "intervyu": 0.50, "taklif": 0.20}
STSENARIY = {
    "baza": {},
    "ariza soni x1.5": {"ariza": 24},
    "javob x1.5 (moslangan rezyume)": {"javob": 0.09},
    "intervyu x1.5 (HR suhbatiga tayyorgarlik)": {"intervyu": 0.75},
    "taklif x1.5 (texnik tayyorgarlik)": {"taklif": 0.30},
    "javob +5 p.p.": {"javob": 0.11},
    "intervyu +5 p.p.": {"intervyu": 0.55},
    "taklif +5 p.p.": {"taklif": 0.25},
    "ommaviy: 48 ariza, javob 0.025": {"ariza": 48, "javob": 0.025},
    "maqsadli: 8 ariza, javob 0.18": {"ariza": 8, "javob": 0.18},
}


def simulyatsiya(rng, par):
    """Har hafta: ariza -> javob -> intervyu -> taklif (binomial zanjir)."""
    a = np.full((N_SIM, HAFTA), par["ariza"])
    j = rng.binomial(a, par["javob"])
    i = rng.binomial(j, par["intervyu"])
    t = rng.binomial(i, par["taklif"])
    kum = t.cumsum(axis=1)
    bor = kum[:, -1] > 0
    birinchi = np.where(bor, (kum > 0).argmax(axis=1) + 1, HAFTA + 1)
    return bor, birinchi, t.sum(axis=1), i.sum(axis=1)


def main() -> None:
    rng = np.random.default_rng(8)
    print(f"=== 1. Stsenariylar ({HAFTA} hafta, {N_SIM} simulyatsiya, FARAZIY) ===")
    print(f"  {'stsenariy':<42} {'kutilgan':>8} {'P(>=1)':>7} {'SE':>6} "
          f"{'intervyu':>8}")
    nat = {}
    for nom, o in STSENARIY.items():
        par = {**BAZA, **o}
        kut = HAFTA * par["ariza"] * par["javob"] * par["intervyu"] * par["taklif"]
        bor, birinchi, _, iv = simulyatsiya(rng, par)
        p = bor.mean()
        se = np.sqrt(p * (1 - p) / N_SIM)
        nat[nom] = (kut, p, se, bor)
        print(f"  {nom:<42} {kut:>8.2f} {p:>7.3f} {se:>6.3f} {iv.mean():>8.1f}")

    print("\n=== 2. Bir xil NISBIY yaxshilanish (x1.5) - qaysi bosqich? ===")
    nisbiy = [k for k in STSENARIY if "x1.5" in k]
    kut = [nat[k][0] for k in nisbiy]
    print(f"  kutilgan takliflar: {', '.join(f'{x:.2f}' for x in kut)}")
    if max(kut) - min(kut) < 1e-9:
        print("  hammasi bir xil: voronka ko'paytma, x1.5 qayerda bo'lmasin - x1.5")
        print("  demak savol 'qaysi bosqich' emas, 'qaysi bosqichni ARZONROQ x1.5 qilish'")

    print("\n=== 3. Bir xil MUTLAQ yaxshilanish (+5 p.p.) ===")
    baza_p = nat["baza"][1]
    for k in [k for k in STSENARIY if "p.p." in k]:
        kut_k, p, se, _ = nat[k]
        d = p - baza_p
        se_d = np.sqrt(se ** 2 + nat["baza"][2] ** 2)
        print(f"  {k:<18} kutilgan x{kut_k / nat['baza'][0]:.2f}, P(>=1) "
              f"{p:.3f} (farq {d:+.3f}, SE {se_d:.3f}, sezilarli {d > 2 * se_d})")
    eng = max([k for k in STSENARIY if "p.p." in k], key=lambda k: nat[k][0])
    print(f"  eng katta foyda: {eng} - eng past konversiyali bosqichda nisbiy o'sish katta")

    print("\n=== 4. Ommaviy va maqsadli strategiya ===")
    for k in ["baza", "ommaviy: 48 ariza, javob 0.025", "maqsadli: 8 ariza, javob 0.18"]:
        kut_k, p, se, _ = nat[k]
        ish = BAZA["ariza"] if k == "baza" else STSENARIY[k]["ariza"]
        print(f"  {k:<32} haftasiga {ish:>2} ariza, kutilgan {kut_k:.2f}, "
              f"P(>=1) {p:.3f}")
    om, mq = nat["ommaviy: 48 ariza, javob 0.025"], nat["maqsadli: 8 ariza, javob 0.18"]
    if mq[0] >= om[0]:
        print(f"  maqsadli strategiya 6 barobar kam ariza bilan kutilgan "
              f"{mq[0]:.2f} >= {om[0]:.2f}")
    else:
        print("  bu faraziy raqamlarda ommaviy strategiya ko'proq taklif beradi")

    print("\n=== 5. O'z voronkangiz: kichik sonlardan tor joyni topish ===")
    kuzat = [("ariza->javob", 70, 1, BAZA["javob"]),
             ("javob->intervyu", 1, 1, BAZA["intervyu"]),
             ("intervyu->taklif", 1, 0, BAZA["taklif"])]
    for nom, n, k, mezon in kuzat:
        post = stats.beta(1 + k, 1 + n - k)       # tekis prior, Bayes (9.4)
        lo, hi = post.ppf([0.05, 0.95])
        p_past = post.cdf(mezon)
        print(f"  {nom:<17} {k:>2}/{n:<3} = {k / n:.3f}, 90% oraliq "
              f"[{lo:.3f}, {hi:.3f}], P(p < {mezon}) = {p_past:.2f}")
    print("  xulosa (P > 0.9 bo'lsa 'tor joy', aks holda 'ma'lumot kam'):")
    for nom, n, k, mezon in kuzat:
        p_past = stats.beta(1 + k, 1 + n - k).cdf(mezon)
        hukm = "tor joy" if p_past > 0.9 else "ma'lumot kam - xulosa qilmang"
        print(f"    {nom:<17} {hukm}")
    print("  ⭐ Voronka - ko'paytma; avval eng past va eng arzon yaxshilanadigan bosqich")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Stsenariylar (8 hafta, 20000 simulyatsiya, FARAZIY) ===
  stsenariy                                  kutilgan  P(>=1)     SE intervyu
  baza                                           0.77   0.541  0.004      3.8
  ariza soni x1.5                                1.15   0.683  0.003      5.8
  javob x1.5 (moslangan rezyume)                 1.15   0.688  0.003      5.8
  intervyu x1.5 (HR suhbatiga tayyorgarlik)      1.15   0.686  0.003      5.8
  taklif x1.5 (texnik tayyorgarlik)              1.15   0.683  0.003      3.8
  javob +5 p.p.                                  1.41   0.757  0.003      7.0
  intervyu +5 p.p.                               0.84   0.572  0.003      4.2
  taklif +5 p.p.                                 0.96   0.623  0.003      3.9
  ommaviy: 48 ariza, javob 0.025                 0.96   0.617  0.003      4.8
  maqsadli: 8 ariza, javob 0.18                  1.15   0.688  0.003      5.8

=== 2. Bir xil NISBIY yaxshilanish (x1.5) - qaysi bosqich? ===
  kutilgan takliflar: 1.15, 1.15, 1.15, 1.15
  hammasi bir xil: voronka ko'paytma, x1.5 qayerda bo'lmasin - x1.5
  demak savol 'qaysi bosqich' emas, 'qaysi bosqichni ARZONROQ x1.5 qilish'

=== 3. Bir xil MUTLAQ yaxshilanish (+5 p.p.) ===
  javob +5 p.p.      kutilgan x1.83, P(>=1) 0.757 (farq +0.216, SE 0.005, sezilarli True)
  intervyu +5 p.p.   kutilgan x1.10, P(>=1) 0.572 (farq +0.032, SE 0.005, sezilarli True)
  taklif +5 p.p.     kutilgan x1.25, P(>=1) 0.623 (farq +0.082, SE 0.005, sezilarli True)
  eng katta foyda: javob +5 p.p. - eng past konversiyali bosqichda nisbiy o'sish katta

=== 4. Ommaviy va maqsadli strategiya ===
  baza                             haftasiga 16 ariza, kutilgan 0.77, P(>=1) 0.541
  ommaviy: 48 ariza, javob 0.025   haftasiga 48 ariza, kutilgan 0.96, P(>=1) 0.617
  maqsadli: 8 ariza, javob 0.18    haftasiga  8 ariza, kutilgan 1.15, P(>=1) 0.688
  maqsadli strategiya 6 barobar kam ariza bilan kutilgan 1.15 >= 0.96

=== 5. O'z voronkangiz: kichik sonlardan tor joyni topish ===
  ariza->javob       1/70  = 0.014, 90% oraliq [0.005, 0.065], P(p < 0.06) = 0.93
  javob->intervyu    1/1   = 1.000, 90% oraliq [0.224, 0.975], P(p < 0.5) = 0.25
  intervyu->taklif   0/1   = 0.000, 90% oraliq [0.025, 0.776], P(p < 0.2) = 0.36
  xulosa (P > 0.9 bo'lsa 'tor joy', aks holda 'ma'lumot kam'):
    ariza->javob      tor joy
    javob->intervyu   ma'lumot kam - xulosa qilmang
    intervyu->taklif  ma'lumot kam - xulosa qilmang
  ⭐ Voronka - ko'paytma; avval eng past va eng arzon yaxshilanadigan bosqich

Natija tahlili.

1-bo'lim — o'nta stsenariy, har biri 20000 simulyatsiya, 8 hafta. Hamma konversiyalar faraziy: haftasiga 16 ariza, javob 0.06, javobdan intervyuga 0.50, intervyudan taklifga 0.20. Baza stsenariysida kutilgan takliflar 0.77, kamida bitta taklif ehtimoli 0.541 (SE 0.004) — ya'ni bu faraziy nomzod 8 haftada deyarli yarim ehtimol bilan taklifsiz qoladi. Bu raqamlar haqiqiy bozorni aks ettirmaydi — o'z voronkangizni 5-bo'limdagidek o'lchang.

2-bo'lim — asosiy matematik fakt: har qanday bosqichni x1.5 qilish kutilgan takliflarni bir xil 1.15 ga olib chiqadi, P(>=1) ham 0.683-0.688 (farq Monte Carlo shovqini darajasida, SE 0.003). Voronka — ko'paytma. Demak, "qaysi bosqich muhimroq?" degan savolning o'zi noto'g'ri; to'g'ri savol — "qaysi bosqichni x1.5 qilish arzonroq?" Rezyumeni vakansiyaga moslash (javob x1.5) bir soat ish bo'lishi mumkin, texnik tayyorgarlik (taklif x1.5) esa haftalar. Yana bir farq jadvalning oxirgi ustunida: javob yoki intervyu bosqichini yaxshilash intervyular sonini 3.8 dan 5.8 ga oshiradi — bu qo'shimcha tajriba (29.9, 29.10), taklif bosqichi esa intervyular sonini o'zgartirmaydi.

3-bo'lim — bir xil mutlaq yaxshilanish (+5 foiz punkt) turlicha ta'sir qiladi: javob bosqichida kutilgan takliflar x1.83, P(>=1) +0.216 ga; taklif bosqichida x1.25 (+0.082); intervyu bosqichida atigi x1.10 (+0.032). Sabab: 0.06 → 0.11 deyarli ikki barobar, 0.50 → 0.55 esa atigi 10%. Eng past konversiyali bosqichda o'sish uchun joy eng ko'p.

4-bo'lim — ommaviy va maqsadli strategiya. Ommaviy: haftasiga 48 ariza, lekin umumiy rezyume tufayli javob 0.025 — kutilgan 0.96, P(>=1) 0.617. Maqsadli: haftasiga 8 ariza, har biri moslangan, javob 0.18 — kutilgan 1.15, P(>=1) 0.688. Olti barobar kam ariza bilan ko'proq natija — bu faraziy raqamlarda. Raqamlar boshqacha bo'lsa (masalan, moslash javobni atigi 0.10 ga oshirsa), ommaviy strategiya yutishi mumkin; shuning uchun o'z voronkangizni o'lchash kerak.

5-bo'lim — o'z voronkangizdan tor joyni topish. Kuzatuv: 70 ariza → 1 javob → 1 intervyu → 0 taklif. Har bosqich konversiyasi uchun tekis prior bilan Beta posterior 9.4-bob. Birinchi bosqich: 1/70 = 0.014, 90% oraliq [0.005, 0.065], faraziy mezon 0.06 dan past bo'lish ehtimoli 0.93 — tor joy. Ikkinchi va uchinchi bosqichlar: bitta kuzatuv, oraliqlar [0.224, 0.975] va [0.025, 0.776] — deyarli hamma narsa mumkin, xulosa chiqarib bo'lmaydi. Kirishdagi tahlilchi aynan shu holatda edi: muammo intervyuda emas (buni bilish uchun ma'lumot yo'q), rezyume va arizalar bosqichida edi.


5. To'g'ri va noto'g'ri tushunishlar

Noto'g'ri fikr To'g'risi
"Rezyume — hamma ishlarim ro'yxati" Rezyume — suhbatga taklif olish uchun tanlangan dalillar; 1 sahifa
"Vazifalarimni yozsam yetadi" Vazifa emas, natija: fe'l + nima + qanday + o'lchanadigan natija
"Katta raqam — kuchli punkt" Bazasiz raqam ("10 marta") shubha uyg'otadi; tekshiriladigan raqam kuchli
"Vakansiya so'zlarini ko'proq qo'shsam — yaxshi" 1-misol: to'ldirilgan rezyume o'xshashligi 0.795, lekin dalilli qamrov 0
"ATS rezyumelarning ko'pini avtomatik rad etadi" Aniq algoritmlar noma'lum va turlicha; oddiy format va to'g'ri atamalar — xavfsiz yo'l
"Barcha talabga javob bermasam ariza bermayman" Ko'p vakansiya "orzu ro'yxati"; majburiylarning ko'pchiligi dalil bilan bo'lsa — ariza bering
"Eng ko'p so'raladigan ko'nikmani o'rganish kerak" 3-misol: eng ko'p vakansiyani "mos" qiladigan ko'nikma boshqacha bo'lishi mumkin
"Ko'proq ariza — ko'proq taklif" 4-misol: ommaviy (48 ariza, javob 0.025) maqsadlidan (8 ariza, javob 0.18) kam berdi
"Bitta intervyuda rad etildim — texnik tayyorgarlik yomon" 1 ta kuzatuvdan xulosa yo'q; oraliq [0.025, 0.776]
"Data Scientist sarlavhasi — model quradigan ish" Sarlavha emas, "Vazifalar" bo'limini o'qing

6. Keng tarqalgan xatolar va yechimlari

1. Vazifa yozish

text
⚠️ Kredit modeli ustida ishladim
✅ Kredit to'lovi kechikishini bashorat qiluvchi gradient boosting modelini qurdim,
   ROC-AUC 0.71 dan 0.78 ga oshdi

2. Bazasiz raqam

text
⚠️ Samaradorlikni 10 marta oshirdim
✅ Haftalik hisobotni SQL va pandas bilan avtomatlashtirdim, tayyorlash vaqti
   6 soatdan 20 daqiqaga qisqardi

3. "Biz" bilan hissani yashirish

text
⚠️ Jamoa bilan A/B test o'tkazdik
✅ A/B test dizaynini (namuna hajmi, metrika) tuzdim va natijani tahlil qildim

4. Vakansiya atamasini ishlatmaslik

python
konlar = "Python, sklearn, XGBoost"                                        # ⚠️
konlar = "Python, scikit-learn (sklearn), gradient boosting (XGBoost)"     # ✅

5. Kalit so'z to'ldirish

text
⚠️ Ko'nikmalar: ... Docker, FastAPI, Airflow, Kubernetes, Spark ... (loyihada yo'q)
✅ Faqat dalili bor ko'nikmalar; o'rganilayotganini "hozir o'rganyapman" deb ajrating

6. Kichik namunadan xulosa

python
if takliflar == 0 and intervyular == 1:
    xulosa = "texnik tayyorgarlik yomon"                                   # ⚠️
xulosa = "ma'lumot kam: bosqich oraliq bahosi juda keng"                   # ✅

7. Bitta rezyume hamma joyga

text
⚠️ 70 ta vakansiyaga bir xil fayl
✅ Asosiy versiya + har rol uchun (Analyst / Scientist / ML Engineer) moslangan
   versiya; jadvalda qaysi versiya qayerga yuborilgani yoziladi

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 14.11, 17.6, 23-qism (o'tilgan): Matn belgilari va TF-IDF — rezyume va vakansiyani solishtirish
  • 11.4-dars (o'tilgan): Proporsiyalar va ularning ishonch oralig'i — vakansiyalardagi ko'nikma ulushlari
  • 9.4-dars (o'tilgan): Bayes teoremasi — kichik sonlardagi voronka konversiyasi (Beta taqsimot)
  • 9.10-dars (o'tilgan): Monte Carlo — voronka simulyatsiyasi
  • 29.4-dars (o'tilgan): Natijani taqdim etish — rezyume punkti ham qisqa "taqdimot"
  • 29.6, 29.7-darslar (o'tilgan): GitHub va portfolio — rezyumedagi havolalar ortidagi dalil
  • 29.9, 29.10-darslar: Intervyu — rezyumedagi har raqam haqida so'raladi
  • 29.11-dars: Ma'lumot etikasi — avtomatik saralash tizimlarining adolatliligi

8. Eng yaxshi amaliyotlar

  1. Rolni sarlavha emas, vazifalar bo'yicha tanlang; 20-50 vakansiyadan ko'nikma chastotasini hisoblang.

  2. 1 sahifa; eng kuchli bo'lim yuqorida; bir ustunli oddiy format, matnli PDF.

  3. Har punkt: fe'l + nima + qanday + o'lchanadigan natija — bazaga nisbatan va to'qimasdan.

  4. Har vakansiyaga moslang: sizda bor ko'nikmalarni vakansiya atamasi bilan va dalil bilan yozing.

  5. Kalit so'z to'ldirmang: o'xshashlik — sifat emas.

  6. Bir nechta kanal: tavsiya, tarmoq, stajirovka, ochiq manba — faqat ochiq e'lonlar emas.

  7. Voronkani jadvalda yuriting; kichik sonlardan xulosa chiqarmang, oraliq bahoga qarang.

  8. Maosh va bozor raqamlarini bir necha rasmiy/ishonchli manbadan tekshiring.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # vakansiya so'zlari bilan to'ldirilgan rezyumening TF-IDF o'xshashligi - yuqorimi, pastmi?
2.  # "sklearn" va "scikit-learn": aniq so'z qidiruvi nima qiladi?
3.  # "Kredit modeli ustida ishladim" - qaysi qoidalarni buzadi?
4.  # "Samaradorlikni 10 marta oshirdim" - qoidaviy ball qanday? nima yetishmaydi?
5.  # eng ko'p so'raladigan ko'nikma = eng ko'p vakansiyani ochadigan ko'nikmami?
6.  # ajratuvchi lug'at sinonimni bilmasa, ko'nikma ulushi qanday siljiydi?
7.  # javob konversiyasini x1.5 qilish va taklif konversiyasini x1.5 qilish - qaysi yaxshi?
8.  # +5 foiz punkt qaysi bosqichda eng ko'p foyda beradi?
9.  # 70 arizada 1 javob, 1 intervyuda 0 taklif - qaysi bosqich muammo?
10. # ATS ning aniq saralash algoritmi ma'lummi?
Javoblar
  1. Yuqori — 1-misolda 0.795 (tahrirlangan B 0.237), lekin dalilli qamrov 0.00
  2. Sinonimni o'tkazib yuboradi — A rezyumesida 3 ta majburiy ko'nikma "yo'q" bo'lib chiqdi
  3. Faol fe'l yo'q, natija raqamsiz, vosita yo'q, juda qisqa, passiv ibora — 0/7
  4. 7/7 — qoidalar faqat shaklni ko'radi; nima, qaysi metrika va baza yo'q
  5. Shart emas — 3-misolda gradient boosting (0.47) a/b testdan (0.42) ko'p so'raladi, lekin ikkinchi qadamda a/b test ko'proq vakansiyani ochdi (0.644 va 0.613)
  6. Pastga — vizualizatsiya 0.28 (haqiqiy 0.42)
  7. Kutilgan takliflar bo'yicha bir xil (1.15); farq — yaxshilash narxida va intervyular sonida (5.8 va 3.8)
  8. Eng past konversiyali bosqichda — javob (x1.83)
  9. Birinchi bosqich (P = 0.93); qolgan ikkitasi uchun ma'lumot kam
  10. Yo'q — tizimga qarab farq qiladi; faqat umumiy tamoyillar ma'lum

Vazifa 2: Punktlarni qayta yozing

Quyidagi punktlarni formula bo'yicha qayta yozing (raqamlarni o'zingiz to'qimang — [X] kabi joy qoldiring, keyin haqiqiy qiymat bilan to'ldiring):

text
1. Ma'lumotlar bazasi bilan ishladim
2. Machine learning modellarini o'rgandim
3. Dashboard yaratishda qatnashdim
4. Worked on NLP tasks
5. Jamoa bilan mijozlar segmentatsiyasini qildik
Javoblar
text
1. [N] ta jadvaldan kunlik savdo ma'lumotini birlashtiruvchi SQL so'rovlarini yozdim,
   hisobot tayyorlash vaqti [X] soatdan [Y] daqiqaga qisqardi
2. (o'rganish - natija emas; loyihaga aylantiring:) Mijoz ketishini bashorat qiluvchi
   modelni scikit-learn bilan qurdim, bazaviy modelga nisbatan PR-AUC [X] dan [Y] ga
3. Savdo bo'limi uchun dashboardning ma'lumot qismini (SQL + pandas) qurdim,
   [N] menejer har hafta foydalanadi
4. Built a TF-IDF + logistic regression classifier for support tickets,
   raising macro-F1 from [X] to [Y] over the keyword baseline
5. K-means bilan mijozlarni [K] segmentga ajratish tahlilini qildim (belgilar,
   silhouette bilan K tanlash); marketing [N] segment uchun alohida taklif ishga tushirdi

Har birida: fe'l sizniki, "qanday" (vosita/usul) bor, natija bazaga nisbatan. 2-punkt — kurs yoki o'rganish rezyumeda "Ta'lim" bo'limiga boradi; tajriba/loyiha bo'limiga faqat natijasi bor ish.

Vazifa 3: Moslash

1-misol asosida:

  1. O'zingiz qiziqqan rol uchun sintetik (yoki haqiqiy e'londan olingan, lekin tashkilot nomisiz) vakansiya matnini VAKANSIYA ga qo'ying va o'z rezyumengizni tekshiring
  2. LUGAT ga yana 5 ta sinonim qo'shing (masalan, "k8s", "REST API") — qamrov o'zgaradimi?
  3. Harf n-gram oralig'ini (2, 4) va (4, 6) qiling — o'zbekcha qo'shimchali so'zlarda ("modellarni", "modeli") o'xshashlik qanday o'zgaradi?
  4. "Dalilli qamrov" ni kengaytiring: ko'nikma loyihalar bo'limida havola bilan bo'lsa ham hisoblansin

Vazifa 4: Punkt tekshiruvchi

2-misol asosida:

  1. "Bazaga nisbatan" qoidasini qo'shing: "dan ... ga", "from ... to", "bazaviy modelga nisbatan" bo'lsa +1
  2. 4-bo'limdagi "bo'sh" punkt endi qanday ball oladi?
  3. O'z rezyumengizdagi barcha punktlarni tekshiring; eng past 2 tasini qayta yozing
  4. Qoidalar qaysi yaxshi punktni noto'g'ri jazolaydi? (masalan, fe'l ro'yxatda yo'q)

Vazifa 5: Ko'nikmalar bo'shlig'i

3-misol asosida:

  1. Maqsad rolni "ML Engineer" qiling — birinchi o'rganiladigan ko'nikma qaysi?
  2. "Mos" chegarasini 0.8 dan 0.6 va 1.0 ga o'zgartiring — tartib o'zgaradimi?
  3. Lug'atga yetishmayotgan sinonimlarni qo'shing — recall 1.0 ga yetadimi va vizualizatsiya ulushi qanday o'zgaradi?
  4. Vakansiyalar sonini 600 dan 60 ga tushiring — ulushlar oralig'i qanchalik kengayadi? 3-bo'limdagi tartibga ishonsa bo'ladimi?

Vazifa 6: Voronka

4-misol asosida:

  1. Har bosqichni yaxshilash "narxi"ni kiriting (masalan, javobni x1.5 qilish — haftasiga 3 soat moslash, taklifni x1.5 — 5 soat tayyorgarlik; faraziy) — bir soat mehnat uchun eng foydali bosqich qaysi?
  2. Intervyular soni ham tajriba beradi: har intervyudan keyin p(taklif) 0.01 ga oshsin (maks 0.35) — ommaviy va maqsadli strategiya natijasi qanday o'zgaradi?
  3. 5-bo'limda 70 ariza o'rniga 20 ariza, 1 javob bo'lsa — birinchi bosqich hali ham "tor joy"mi?
  4. P(>=1 taklif) 0.8 ga yetishi uchun baza stsenariysida necha hafta kerak?

Vazifa 7: O'ylash

Kurs bitiruvchisi: "Men 100 ta vakansiyaga ariza berdim, 3 ta javob, 2 ta intervyu, 0 ta taklif. Demak, intervyularda yomonman — keyingi 2 oy faqat algoritmik masalalar yechaman. Rezyumeni o'zgartirishga hojat yo'q, u yaxshi — 3 ta javob bor-ku."

Javob

Qisqa javob: ikkala xulosa ham ma'lumotdan kelib chiqmaydi. Ikki intervyuda nol taklif — o'rtacha nomzod uchun ham eng ehtimolli natija, 100 arizada 3 javob esa birinchi bosqich ham zaif bo'lishi mumkinligini ko'rsatadi.

1. "Intervyularda yomonman" — tekshiramiz. 4-misoldagi usul bilan:

python
from scipy import stats

stats.beta(1 + 0, 1 + 2).ppf([0.05, 0.95])     # intervyu->taklif, 0/2: [0.017, 0.632]
0.8 ** 2                                        # p(taklif) = 0.2 bo'lsa, 0/2 ehtimoli: 0.64

2 ta intervyuda 0 taklif — faraziy p = 0.2 li "o'rtacha" nomzodda 64% ehtimol bilan yuz beradi. Oraliq [0.017, 0.632] — bu ma'lumot "yomon" ham, "yaxshi" ham degan xulosani qo'llab-quvvatlamaydi.

2. "Rezyume yaxshi — 3 ta javob bor" — tekshiramiz. 3/100: 90% oraliq [0.014, 0.075], faraziy mezon 0.06 dan past bo'lish ehtimoli 0.86. Bu "tor joy" deyish uchun 0.9 dan past, lekin rezyumeni "yaxshi" deyish uchun asos ham yo'q — aksincha, zaif bo'lishi ehtimoli yuqori.

3. Nima qilish kerak.

  • Rezyumeni 2-misol tekshiruvidan o'tkazing va har rol uchun moslangan versiya qiling (1-misol) — bu eng arzon yaxshilanish, va 4-misolda ko'rdik: past konversiyali bosqichda o'sish uchun joy ko'p.
  • Intervyulardan keyin eslatma yozing: qaysi savollarda qiynaldingiz? 2 ta intervyu — statistika emas, lekin mazmunli fikr-mulohaza manbai.
  • Algoritmik masalalar — foydali, lekin DS intervyularida statistika, ML, SQL va case study ham bor (29.9, 29.10); faqat bittasiga 2 oy sarflash — boshqa bosqichlarni e'tiborsiz qoldirish.
  • Jadvalni yuritishda davom eting: 20-30 ta keyingi arizadan keyin yangi versiya rezyumening javob konversiyasini eskisi bilan solishtiring — lekin bu ham kichik namuna, oraliqqa qarang.

Bitiruvchiga javob: "Ikki intervyudan 'yomonman' degan xulosa chiqmaydi — o'rtacha nomzod ham ko'pincha shunday natija oladi. 100 arizada 3 javob esa rezyume yaxshi ekanini emas, balki uni ham yaxshilash kerakligini ko'rsatishi mumkin. Vaqtni bo'ling: bir hafta rezyume va moslashga, qolganini intervyuning barcha turlariga tayyorgarlikka — va har bosqichni jadvalda o'lchang."

Nimani mustahkamlaydi: 2.1, 2.4, 2.6, 2.7-bo'limlar.


Xulosa

Bu darsda rezyume va ish qidirishga ma'lumot bilan yondashishni o'rgandik.

Eng muhim uch fikr:

  1. Rol va rezyume — dalilga asoslangan. Rollar sarlavha bilan emas, vazifalar bilan farqlanadi (Analyst — "nima bo'ldi", Scientist — "nima bo'ladi", ML Engineer — "qanday ishlatamiz", MLOps — "hayot siklini avtomatlashtirish", Research — "yangi usul"). Rezyume punkti — fe'l + nima + qanday + o'lchanadigan natija: 2-misolda qayta yozish har juftda ballni oshirdi (0.33 dan 7.00 ga), lekin shakli "mukammal", mazmuni bo'sh punkt ham 7/7 oldi — raqam bazaga nisbatan va tekshiriladigan bo'lishi kerak.

  2. Moslash — to'qish emas. 1-misolda vakansiya so'zlari bilan to'ldirilgan rezyume TF-IDF o'xshashligi bo'yicha eng yuqori (0.795), lekin dalilli qamrovi nol; xuddi shu tajribani vakansiya tilida va natija bilan yozgan rezyume majburiy qamrovni 0.50 dan 1.00 ga oshirdi. Sinonimsiz qidiruv 3 ta ko'nikmani yo'qotdi. ATS ning aniq algoritmlari noma'lum — oddiy format va to'g'ri atamalar xavfsiz yo'l. 3-misolda eng ko'p so'raladigan ko'nikma har doim ham eng ko'p eshik ochadigani emasligini va ajratuvchi lug'atning xatosi (vizualizatsiya 0.28 va haqiqiy 0.42) chastota jadvalini buzishini ko'rdik.

  3. Ish qidirish — voronka, uni o'lchang. Voronka ko'paytma: 4-misolda har qanday bosqichni x1.5 qilish bir xil natija berdi (1.15), +5 foiz punkt esa eng past konversiyali bosqichda eng ko'p foyda keltirdi (x1.83). Faraziy raqamlarda 8 ta moslangan ariza 48 ta umumiy arizadan ko'proq natija berdi. O'z voronkangizda kichik sonlardan xulosa chiqarmang: 1/70 — ishonchli "tor joy", 0/1 intervyu — hech narsa demaydi.

Keyingi darsda Intervyu: statistika va ehtimollik: tez-tez so'raladigan savollar — Bayes teoremasi va tibbiy test masalasi, tug'ilgan kun paradoksi, kutilgan qiymat masalalari, p-qiymat nima va nima emas, ishonch oralig'i talqini, I va II tur xatolar, markaziy limit teoremasi, Simpson paradoksi, tanlash tarafkashligi va A/B test dizayni — har bir javob simulyatsiya bilan tekshiriladi.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
29.8-dars: Rezyume va ish qidirish — IlmHamroh