{"version":"risk-patterns-1.0","updated":"2026-11-03","model_card":{"name":"Kolaboro risk patterns","version":"1.0","purpose":"Show which tracked projects look unusual on public warning signs compared with all other tracked projects, and why. It ranks; it does not predict.","not_for":"It is not a fraud predictor and not a verdict. No project in our data has a confirmed outcome (fraud, collapse or delivery), so nothing could be trained or tested against outcomes.","data":{"file":"/data/bali-cases.json","sha256":"d20961b579d775b75c2781029b8dc758452006f81f7c3f26f3e55f89305dc73d","dataset_date":"2026-11-03","projects":891,"markets":144},"features":[{"feature":"guaranteed_return_language","label":"Advertises guaranteed returns","kind":"binary","prevalence_pct":4.8,"z_when_present":4.44},{"feature":"advertised_yield_pct","label":"Advertised yield, % a year","kind":"number, mostly zero","present_pct":21.2,"z_when_present":1.93,"median_when_present":10,"scale_when_present":4.4478,"size_z_cap":4,"z_cap":8},{"feature":"overdue_months","label":"Months past the advertised completion","kind":"number, mostly zero","present_pct":3.4,"z_when_present":5.36,"median_when_present":5,"scale_when_present":4.4478,"size_z_cap":4,"z_cap":8},{"feature":"delay_months","label":"Months the completion date has moved","kind":"number, mostly zero","present_pct":11.6,"z_when_present":2.77,"median_when_present":12,"scale_when_present":8.8956,"size_z_cap":4,"z_cap":8},{"feature":"no_permit_claimed","label":"No permit or licence claimed","kind":"binary","prevalence_pct":56.3,"z_when_present":0.88},{"feature":"permit_contradicted","label":"Permit claim contradicted by a register or document","kind":"binary","prevalence_pct":2.2,"z_when_present":6.6},{"feature":"no_deposit_protection","label":"No deposit protection stated","kind":"binary","prevalence_pct":78.3,"z_when_present":0.53},{"feature":"contradicted_checks","label":"Checks contradicted by an independent source","kind":"number, mostly zero","present_pct":10.9,"z_when_present":2.86,"median_when_present":1,"scale_when_present":0.0646,"size_z_cap":4,"z_cap":8},{"feature":"contradicted_claims_share","label":"Share of claims contradicted","kind":"number","median":0.111,"scale":0.1647,"scale_basis":"MAD x 1.4826","present_pct":76.3,"z_cap":8},{"feature":"public_problem_flags","label":"Public problems reported (disputes, complaints, regulator action)","kind":"number, mostly zero","present_pct":4.9,"z_when_present":4.39,"median_when_present":1,"scale_when_present":0.3133,"size_z_cap":4,"z_cap":8},{"feature":"register_not_approved","label":"Not on the official approval register checked","kind":"binary","prevalence_pct":0.2,"z_when_present":8},{"feature":"satellite_no_change","label":"Sold as under construction, no visible change on satellite","kind":"binary","prevalence_pct":1.3,"z_when_present":8},{"feature":"front_loaded_payment_plan","label":"Share of the price due before completion, % (advertised payment plan)","kind":"number, where known","present_pct":19.6,"known_projects":175,"median":60,"scale":29.652,"scale_basis":"MAD x 1.4826 among projects where it is known","z_cap":8},{"feature":"no_track_record","label":"No developer track record found","kind":"binary","prevalence_pct":34.2,"z_when_present":1.39}],"features_not_available":[{"feature":"payment_plan_for_every_project","why":"The front-loaded feature uses only advertised plans that state a clear share due on completion (175 projects). Plans written as ranges, dated schedules or options are left out rather than guessed."},{"feature":"price_vs_registered_sales","why":"Advertised price per m2 versus official sales in the same area exists for 21 Dubai projects only (see /prices/). Too sparse across all markets to be a fair feature yet."}],"method":["Each feature is turned into a robust z-score against all 891 tracked projects. Yes/no signs: (1 - p) / sqrt(p (1 - p)) when present, where p is the share of projects showing it, so a rare sign weighs more than a common one. Numbers: (x - median) / (1.4826 x MAD). Numbers that most projects do not have at all (overdue months, contradicted checks, public problems): the same rarity term for having any, plus a robust z of the size among the projects that have it (0 to 4). Every contribution is capped at 8, and only the risky direction counts: absence of a sign adds nothing.","The score is the sum of these z-scores, so every point of it is traceable to one feature. Projects at or above the 95th percentile of the score are labelled \"unusual\", at or above the 75th \"somewhat unusual\".","Cross-check: an isolation forest (500 trees, random_state 7, scikit-learn) on the raw features (an unknown payment plan is coded as its own value), with no labels. Its ranking is published next to ours; where both put a project in the top 5%%, the pattern is not an artefact of our weighting."],"agreement":{"spearman_rank_correlation":0.642,"top5_both_methods":32,"top5_size":45},"thresholds":{"unusual_score_from":12.16,"somewhat_unusual_from":5.47},"limits":["Features come from what developers publish and what we could check; a project that publishes less can look calmer than it is.","Common signs (no deposit protection stated, no permit claimed) weigh little because most projects show them; that is a property of the peer group, not a judgement that they are safe.","Peers are all tracked projects in every market, so market norms (for example yields in Bali) affect scores.","Features overlap with the public disclosure score; this view adds rarity weighting and the cross-check, not new facts.","Scores change when the dataset changes; each version is tied to the dataset SHA-256 above."]},"summary":{"unusual":45,"somewhat_unusual":178,"typical":668},"markets":[{"market":"Bali","projects":76,"unusual":11,"median_score":5.96},{"market":"Cambodia","projects":9,"unusual":0,"median_score":5.85},{"market":"Algarve","projects":8,"unusual":1,"median_score":5.28},{"market":"Koh Samui","projects":12,"unusual":0,"median_score":5.11},{"market":"Lombok","projects":24,"unusual":0,"median_score":5.02},{"market":"Georgia","projects":12,"unusual":0,"median_score":4.66},{"market":"Malaysia","projects":19,"unusual":0,"median_score":4.11},{"market":"Northern Cyprus","projects":8,"unusual":1,"median_score":4.04},{"market":"Ras Al Khaimah","projects":17,"unusual":1,"median_score":3.26},{"market":"Oman","projects":14,"unusual":0,"median_score":3.12},{"market":"Costa Rica","projects":9,"unusual":1,"median_score":2.99},{"market":"Montenegro","projects":8,"unusual":0,"median_score":2.96},{"market":"Greece","projects":11,"unusual":0,"median_score":2.79},{"market":"Mérida","projects":8,"unusual":0,"median_score":2.79},{"market":"Phuket","projects":21,"unusual":3,"median_score":2.79},{"market":"Portugal","projects":9,"unusual":1,"median_score":2.79},{"market":"Sharjah","projects":10,"unusual":0,"median_score":2.79},{"market":"Los Cabos","projects":15,"unusual":0,"median_score":2.76},{"market":"Riviera Maya","projects":21,"unusual":1,"median_score":2.76},{"market":"Miami","projects":13,"unusual":0,"median_score":2.34},{"market":"Cyprus","projects":9,"unusual":0,"median_score":1.95},{"market":"Bangkok","projects":8,"unusual":0,"median_score":1.93},{"market":"Istanbul","projects":13,"unusual":1,"median_score":1.93},{"market":"Vietnam","projects":11,"unusual":3,"median_score":1.91},{"market":"Puerto Vallarta","projects":12,"unusual":1,"median_score":1.52},{"market":"Sri Lanka","projects":10,"unusual":0,"median_score":1.45},{"market":"Egypt","projects":13,"unusual":0,"median_score":1.41},{"market":"Mauritius","projects":9,"unusual":0,"median_score":1.39},{"market":"Abu Dhabi","projects":19,"unusual":0,"median_score":1.32},{"market":"Philippines","projects":14,"unusual":0,"median_score":1.07},{"market":"Costa del Sol","projects":20,"unusual":0,"median_score":0.88},{"market":"Spain","projects":11,"unusual":0,"median_score":0.88},{"market":"Dubai","projects":71,"unusual":2,"median_score":0.67},{"market":"Gold Coast","projects":8,"unusual":0,"median_score":0.53},{"market":"Pattaya","projects":12,"unusual":0,"median_score":0.53}],"top":[{"id":"PAL-001","m":"Palm Beach County","s":31.71,"r":100,"if":100,"lvl":"unusual","c":[["public_problem_flags",7.58,2],["contradicted_checks",6.86,2],["delay_months",6.77,108],["overdue_months",6.71,11],["contradicted_claims_share",1.53,0.364],["no_track_record",1.39,1],["no_permit_claimed",0.88,1]]},{"id":"VNM-001","m":"Vietnam","s":28.55,"r":99.9,"if":99.8,"lvl":"unusual","c":[["public_problem_flags",8,3],["permit_contradicted",6.6,1],["guaranteed_return_language",4.44,1],["contradicted_claims_share",2.87,0.583],["contradicted_checks",2.86,1],["advertised_yield_pct",2.38,12],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"MED-001","m":"Medellín","s":26.11,"r":99.8,"if":99.9,"lvl":"unusual","c":[["overdue_months",8,35],["public_problem_flags",8,3],["contradicted_checks",6.86,3],["no_track_record",1.39,1],["contradicted_claims_share",0.98,0.273],["no_permit_claimed",0.88,1]]},{"id":"PHK-006","m":"Phuket","s":24.62,"r":99.7,"if":98.7,"lvl":"unusual","c":[["register_not_approved",8,1],["contradicted_checks",6.86,2],["permit_contradicted",6.6,1],["contradicted_claims_share",1.75,0.4],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"MAN-003","m":"Manchester","s":22.24,"r":99.6,"if":99.4,"lvl":"unusual","c":[["satellite_no_change",8,1],["public_problem_flags",7.58,2],["contradicted_checks",2.86,1],["advertised_yield_pct",1.93,6],["contradicted_claims_share",1.35,0.333],["no_deposit_protection",0.53,1]]},{"id":"RMY-013","m":"Riviera Maya","s":21.31,"r":99.4,"if":98.5,"lvl":"unusual","c":[["contradicted_checks",6.86,2],["permit_contradicted",6.6,1],["public_problem_flags",4.39,1],["no_track_record",1.39,1],["no_permit_claimed",0.88,1],["contradicted_claims_share",0.67,0.222],["no_deposit_protection",0.53,1]]},{"id":"BHS-001","m":"Bahamas","s":20.4,"r":99.3,"if":98.2,"lvl":"unusual","c":[["satellite_no_change",8,1],["public_problem_flags",4.39,1],["contradicted_checks",2.86,1],["contradicted_claims_share",2.36,0.5],["no_track_record",1.39,1],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"BALI-050","m":"Bali","s":20.08,"r":99.2,"if":99.7,"lvl":"unusual","c":[["overdue_months",5.36,5],["guaranteed_return_language",4.44,1],["advertised_yield_pct",3.62,17.54],["contradicted_checks",2.86,1],["contradicted_claims_share",1.53,0.364],["no_track_record",1.39,1],["no_permit_claimed",0.88,1]]},{"id":"NCY-001","m":"Northern Cyprus","s":19.99,"r":99.1,"if":99.3,"lvl":"unusual","c":[["overdue_months",8,17],["guaranteed_return_language",4.44,1],["public_problem_flags",4.39,1],["contradicted_claims_share",1.75,0.4],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"BHX-003","m":"Birmingham","s":18.92,"r":99,"if":97.8,"lvl":"unusual","c":[["satellite_no_change",8,1],["public_problem_flags",4.39,1],["delay_months",3.1,15],["advertised_yield_pct",1.93,5],["contradicted_claims_share",0.98,0.273],["no_deposit_protection",0.53,1]]},{"id":"IST-004","m":"Istanbul","s":18.88,"r":98.9,"if":99.1,"lvl":"unusual","c":[["public_problem_flags",7.58,2],["delay_months",6.77,83],["contradicted_checks",2.86,1],["contradicted_claims_share",1.15,0.3],["no_deposit_protection",0.53,1]]},{"id":"BALI-012","m":"Bali","s":18.01,"r":98.8,"if":98.3,"lvl":"unusual","c":[["permit_contradicted",6.6,1],["public_problem_flags",4.39,1],["contradicted_checks",2.86,1],["advertised_yield_pct",2.29,11.6],["contradicted_claims_share",1.35,0.333],["no_deposit_protection",0.53,1]]},{"id":"DXB-048","m":"Dubai","s":17.86,"r":98.7,"if":99.6,"lvl":"unusual","c":[["overdue_months",6.03,8],["public_problem_flags",4.39,1],["contradicted_checks",2.86,1],["delay_months",2.77,9],["no_track_record",1.39,1],["contradicted_claims_share",0.43,0.182]]},{"id":"BJV-003","m":"Bodrum","s":17.62,"r":98.5,"if":97.4,"lvl":"unusual","c":[["permit_contradicted",6.6,1],["public_problem_flags",4.39,1],["contradicted_checks",2.86,1],["no_track_record",1.39,1],["contradicted_claims_share",0.98,0.273],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"NZL-002","m":"New Zealand","s":17.61,"r":98.4,"if":96,"lvl":"unusual","c":[["overdue_months",6.03,8],["public_problem_flags",4.39,1],["contradicted_checks",2.86,1],["contradicted_claims_share",1.53,0.364],["no_track_record",1.39,1],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"BALI-016","m":"Bali","s":17.54,"r":98.3,"if":97.1,"lvl":"unusual","c":[["permit_contradicted",6.6,1],["contradicted_checks",2.86,1],["delay_months",2.77,9],["advertised_yield_pct",2.38,12],["contradicted_claims_share",1.53,0.364],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"DXB-050","m":"Dubai","s":17.36,"r":98.2,"if":99.2,"lvl":"unusual","c":[["overdue_months",5.36,2],["public_problem_flags",4.39,1],["delay_months",3.78,21],["contradicted_checks",2.86,1],["contradicted_claims_share",0.98,0.273]]},{"id":"PAN-002","m":"Panama","s":16.8,"r":98.1,"if":96.4,"lvl":"unusual","c":[["satellite_no_change",8,1],["delay_months",4.11,24],["advertised_yield_pct",1.93,8],["contradicted_claims_share",1.35,0.333],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"SUM-003","m":"Sumba","s":16.23,"r":98,"if":99,"lvl":"unusual","c":[["permit_contradicted",6.6,1],["contradicted_checks",2.86,1],["advertised_yield_pct",2.6,13],["contradicted_claims_share",1.75,0.4],["front_loaded_payment_plan",1.01,90],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"SLU-001","m":"St Lucia","s":15.43,"r":97.9,"if":96.9,"lvl":"unusual","c":[["satellite_no_change",8,1],["guaranteed_return_language",4.44,1],["advertised_yield_pct",1.93,8],["contradicted_claims_share",0.54,0.2],["no_deposit_protection",0.53,1]]},{"id":"ALG-002","m":"Algarve","s":15.35,"r":97.8,"if":97.6,"lvl":"unusual","c":[["overdue_months",5.36,5],["guaranteed_return_language",4.44,1],["delay_months",3.1,15],["advertised_yield_pct",1.93,5],["no_deposit_protection",0.53,1]]},{"id":"SEZ-001","m":"Seychelles","s":15.1,"r":97.6,"if":98.8,"lvl":"unusual","c":[["overdue_months",6.03,8],["guaranteed_return_language",4.44,1],["advertised_yield_pct",1.93,5],["no_track_record",1.39,1],["no_permit_claimed",0.88,1],["contradicted_claims_share",0.43,0.182]]},{"id":"BALI-056","m":"Bali","s":15.06,"r":97.5,"if":95.6,"lvl":"unusual","c":[["permit_contradicted",6.6,1],["advertised_yield_pct",3.05,15],["contradicted_checks",2.86,1],["contradicted_claims_share",1.15,0.3],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]},{"id":"NYC-002","m":"New York","s":14.84,"r":97.4,"if":94.8,"lvl":"unusual","c":[["satellite_no_change",8,1],["public_problem_flags",4.39,1],["no_track_record",1.39,1],["contradicted_claims_share",0.54,0.2],["no_deposit_protection",0.53,1]]},{"id":"PVR-001","m":"Puerto Vallarta","s":14.11,"r":97.3,"if":94.7,"lvl":"unusual","c":[["permit_contradicted",6.6,1],["contradicted_checks",2.86,1],["contradicted_claims_share",1.85,0.417],["no_track_record",1.39,1],["no_permit_claimed",0.88,1],["no_deposit_protection",0.53,1]]}]}