Dreipfelt commited on
Commit
46965d6
ยท
0 Parent(s):

feat: clean HF Space deployment

Browse files
Dockerfile ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # oasis/models/crime_predictor/Dockerfile
2
+ # Stage 1: Training
3
+ FROM python:3.11-slim AS trainer
4
+
5
+ WORKDIR /app
6
+ COPY requirements.txt .
7
+ RUN pip install --no-cache-dir -r requirements.txt
8
+
9
+ COPY . .
10
+ ARG DATA_URL
11
+ RUN python train.py --data-url ${DATA_URL}
12
+
13
+ # Stage 2: Production (minimal)
14
+ FROM python:3.11-slim AS production
15
+
16
+ WORKDIR /app
17
+ COPY --from=trainer /app/models/crime_predictor.pkl ./models/
18
+ COPY requirements.txt .
19
+ RUN pip install --no-cache-dir -r requirements.txt
20
+
21
+ COPY predict.py model.py config.yaml ./
22
+ EXPOSE 8000
23
+
24
+ CMD ["uvicorn", "predict:app", "--host", "0.0.0.0", "--port", "8000"]
README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Oasis Security
3
+ emoji: ๐Ÿšจ
4
+ colorFrom: red
5
+ colorTo: blue
6
+ sdk: streamlit
7
+ sdk_version: "1.41.0"
8
+ python_version: "3.10"
9
+ app_file: files/Delinquance.py
10
+ pinned: false
11
+ ---
12
+
13
+ # Oasis Security โ€” Crime & Delinquency in France
14
+
15
+ Analysis of crime and delinquency data from Police Nationale and Gendarmerie Nationale (2012-2021), with predictions up to 2030 using Prophet, XGBoost, and LightGBM.
data/delinquance_benchmark.csv ADDED
@@ -0,0 +1,411 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ modele,source,indicateur,region,region_nom,RMSE,MAE,MAPE
2
+ Prophet,A,Usage de stupรฉfiants,R01,Guadeloupe,238.05000378871927,181.69297831660015,9.033062173014507
3
+ Prophet,B,Usage de stupรฉfiants,R01,Guadeloupe,72.8593233738032,54.03708826376305,4.195471030604914
4
+ Prophet,A,Usage de stupรฉfiants,R02,Martinique,269.0937556704952,256.0891625330123,18.412253332187884
5
+ Prophet,B,Usage de stupรฉfiants,R02,Martinique,262.6303800052398,228.31918690866422,19.169590156614635
6
+ Prophet,A,Usage de stupรฉfiants,R03,Guyane,155.35872571533903,146.04753389069288,17.49182713153545
7
+ Prophet,B,Usage de stupรฉfiants,R03,Guyane,123.38036743896966,104.04898573124777,29.276561031774417
8
+ Prophet,A,Usage de stupรฉfiants,R04,La Rรฉunion,306.7317703800456,271.5859930521548,13.223153534570416
9
+ Prophet,B,Usage de stupรฉfiants,R04,La Rรฉunion,495.416449868307,489.3766170146064,33.63241141020226
10
+ Prophet,A,Usage de stupรฉfiants,R06,Mayotte,128.17401124203687,91.00077687814502,35.930172001995466
11
+ Prophet,B,Usage de stupรฉfiants,R06,Mayotte,15.935917996360892,14.622194862594085,11.078808966265717
12
+ Prophet,A,Cambriolages de logement,R01,Guadeloupe,832.9045184729803,795.1881093060623,83.11198562455888
13
+ Prophet,B,Cambriolages de logement,R01,Guadeloupe,793.4408127787975,758.4147850505763,79.21916434984612
14
+ Prophet,A,Cambriolages de logement,R02,Martinique,376.38161068924876,371.01559276179455,54.9194750842003
15
+ Prophet,B,Cambriolages de logement,R02,Martinique,388.47921052758744,382.35859763052895,56.443638189186515
16
+ Prophet,A,Cambriolages de logement,R03,Guyane,183.2480538651961,181.1848259264902,18.26714706554934
17
+ Prophet,B,Cambriolages de logement,R03,Guyane,181.59704310341286,181.13821649742704,18.57844919260254
18
+ Prophet,A,Cambriolages de logement,R04,La Rรฉunion,188.23678808195464,184.1931508970821,19.50438260377077
19
+ Prophet,B,Cambriolages de logement,R04,La Rรฉunion,212.7807493338645,211.21231789526803,22.8242498738419
20
+ Prophet,A,Cambriolages de logement,R06,Mayotte,290.27865648368504,262.6139837523835,112.7026779889272
21
+ Prophet,B,Cambriolages de logement,R06,Mayotte,259.57917612520487,252.76796420316006,55.08241939140932
22
+ Prophet,A,Vols sans violence contre des personnes,R01,Guadeloupe,71.87822169941951,56.456892852751565,11.61004037172772
23
+ Prophet,B,Vols sans violence contre des personnes,R01,Guadeloupe,219.74448318696483,212.40749423684292,8.842016392382783
24
+ Prophet,A,Vols sans violence contre des personnes,R02,Martinique,71.50551372288767,56.90755682746112,11.194565767356467
25
+ Prophet,B,Vols sans violence contre des personnes,R02,Martinique,548.6907395463606,548.49872599385,34.6446496228014
26
+ Prophet,A,Vols sans violence contre des personnes,R03,Guyane,771.091371700317,680.3754510262307,41.857613039896954
27
+ Prophet,B,Vols sans violence contre des personnes,R03,Guyane,313.41235482231076,313.3575985036441,16.167729079624994
28
+ Prophet,A,Vols sans violence contre des personnes,R04,La Rรฉunion,129.28022817074208,102.41311797615026,22.676290815085896
29
+ Prophet,B,Vols sans violence contre des personnes,R04,La Rรฉunion,647.2327666857201,643.5331790417381,21.993854049678006
30
+ Prophet,A,Vols sans violence contre des personnes,R06,Mayotte,651.1067893231213,606.45345808863,95.56883711885679
31
+ Prophet,B,Vols sans violence contre des personnes,R06,Mayotte,53.40990530257883,49.40889440032038,4.319157282225089
32
+ Prophet,A,Destructions et dรฉgradations volontaires,R01,Guadeloupe,22.964792541952182,22.887599710627192,20.794018579614413
33
+ Prophet,B,Destructions et dรฉgradations volontaires,R01,Guadeloupe,265.9631082496236,193.6444790991602,6.4949109782779635
34
+ Prophet,A,Destructions et dรฉgradations volontaires,R02,Martinique,38.39214394584219,33.8000721981822,39.31528286389051
35
+ Prophet,B,Destructions et dรฉgradations volontaires,R02,Martinique,94.76565482764492,85.5986715452591,3.7874715958035337
36
+ Prophet,A,Destructions et dรฉgradations volontaires,R03,Guyane,11.01212466821221,10.895639652168743,25.127170192219623
37
+ Prophet,B,Destructions et dรฉgradations volontaires,R03,Guyane,220.46846069890674,171.17687280785447,11.578299856703987
38
+ Prophet,A,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,20.211561064116715,19.847629917043463,6.424416626299612
39
+ Prophet,B,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,401.3292523490567,349.5423322814163,7.740517824915344
40
+ Prophet,A,Destructions et dรฉgradations volontaires,R06,Mayotte,29.066210047632737,21.280125772352108,43.6909532406686
41
+ Prophet,B,Destructions et dรฉgradations volontaires,R06,Mayotte,826.263033342285,826.2630328406864,47.78352139522944
42
+ Prophet,A,Violences sexuelles,R01,Guadeloupe,41.57611473165103,33.11583723105309,15.121393573006964
43
+ Prophet,B,Violences sexuelles,R01,Guadeloupe,73.02489453243314,57.47701663074082,9.614415323462211
44
+ Prophet,A,Violences sexuelles,R02,Martinique,31.062574234726195,25.583341852231996,10.534737631998311
45
+ Prophet,B,Violences sexuelles,R02,Martinique,82.14920948830938,62.4136982847956,8.677704523434324
46
+ Prophet,A,Violences sexuelles,R03,Guyane,23.125005171231606,17.574597002476594,5.487315072930684
47
+ Prophet,B,Violences sexuelles,R03,Guyane,74.28974161574968,68.05686666409429,11.790451074159053
48
+ Prophet,A,Violences sexuelles,R04,La Rรฉunion,76.04201581323434,61.41833131846266,11.237155040451537
49
+ Prophet,B,Violences sexuelles,R04,La Rรฉunion,85.86712007551073,85.64144667556343,6.009061963769394
50
+ Prophet,A,Violences sexuelles,R06,Mayotte,92.55976439738656,70.7266221806394,51.98531908177435
51
+ Prophet,B,Violences sexuelles,R06,Mayotte,38.25503443483432,38.07809461107183,10.05463475883363
52
+ XGBoost,A,Usage de stupรฉfiants,R01,Guadeloupe,438.61019587714304,360.039794921875,18.32262776054861
53
+ XGBoost,B,Usage de stupรฉfiants,R01,Guadeloupe,107.16817086111914,82.0,5.732329035233308
54
+ XGBoost,A,Usage de stupรฉfiants,R02,Martinique,368.69875862240144,347.7535400390625,24.93425675666532
55
+ XGBoost,B,Usage de stupรฉfiants,R02,Martinique,164.19702242528876,158.5,13.919262785651899
56
+ XGBoost,A,Usage de stupรฉfiants,R03,Guyane,156.45120344374422,142.3094482421875,16.912676365772615
57
+ XGBoost,B,Usage de stupรฉfiants,R03,Guyane,68.72260648106916,55.881988525390625,15.563050424978798
58
+ XGBoost,A,Usage de stupรฉfiants,R04,La Rรฉunion,339.66749879908605,292.168701171875,14.062800554642607
59
+ XGBoost,B,Usage de stupรฉfiants,R04,La Rรฉunion,263.3082723363192,240.12921142578125,16.550790323598065
60
+ XGBoost,A,Usage de stupรฉfiants,R06,Mayotte,118.33114622751397,87.1909408569336,36.56724313710373
61
+ XGBoost,B,Usage de stupรฉfiants,R06,Mayotte,10.543568358243,9.556007385253906,6.694527035667782
62
+ XGBoost,A,Usage de stupรฉfiants,R11,รŽle-de-France,3056.5285840887473,2814.0,4.8132482247689845
63
+ XGBoost,B,Usage de stupรฉfiants,R11,รŽle-de-France,1954.3592832520171,1208.1025695800781,25.8809549486821
64
+ XGBoost,A,Usage de stupรฉfiants,R24,Centre-Val de Loire,1825.8237524638118,1672.0078125,13.901838417087987
65
+ XGBoost,B,Usage de stupรฉfiants,R24,Centre-Val de Loire,240.25965517458292,193.91104634602866,23.49304662037279
66
+ XGBoost,A,Usage de stupรฉfiants,R27,Bourgogne-FC,2532.4404970235737,2477.6357421875,20.248690326453065
67
+ XGBoost,B,Usage de stupรฉfiants,R27,Bourgogne-FC,305.38932202691956,235.18816757202148,33.13580432441135
68
+ XGBoost,A,Usage de stupรฉfiants,R28,Normandie,2015.6961604595826,1907.1640625,14.392115891773097
69
+ XGBoost,B,Usage de stupรฉfiants,R28,Normandie,720.6395590076374,526.112744140625,48.58383535125015
70
+ XGBoost,A,Usage de stupรฉfiants,R32,Hauts-de-France,2230.6267942173936,1809.7734375,7.792236657315814
71
+ XGBoost,B,Usage de stupรฉfiants,R32,Hauts-de-France,2758.3550702843213,1607.223974609375,79.72095661730592
72
+ XGBoost,A,Usage de stupรฉfiants,R44,Grand Est,3765.4858347725476,3394.884765625,13.865793494131081
73
+ XGBoost,B,Usage de stupรฉfiants,R44,Grand Est,343.1619745015389,264.0139984130859,30.550013007426784
74
+ XGBoost,A,Usage de stupรฉfiants,R52,Pays de la Loire,2832.950580100568,2566.244140625,15.794109701832168
75
+ XGBoost,B,Usage de stupรฉfiants,R52,Pays de la Loire,657.0243752060032,403.084765625,24.481360424757632
76
+ XGBoost,A,Usage de stupรฉfiants,R53,Bretagne,2752.024215838609,2466.0849609375,18.091028364639143
77
+ XGBoost,B,Usage de stupรฉfiants,R53,Bretagne,496.4289414297019,343.6061706542969,15.091883379729943
78
+ XGBoost,A,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,4741.545442722036,4296.302734375,15.859691086320558
79
+ XGBoost,B,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,308.85048587718364,179.95559056599936,20.976820133805717
80
+ XGBoost,A,Usage de stupรฉfiants,R76,Occitanie,4753.597210348836,4231.189453125,14.746600952049963
81
+ XGBoost,B,Usage de stupรฉfiants,R76,Occitanie,825.3215024084767,507.22206233097955,135.48579991134073
82
+ XGBoost,A,Usage de stupรฉfiants,R84,Auvergne-RA,7440.749517469939,7024.08203125,18.74302846626279
83
+ XGBoost,B,Usage de stupรฉfiants,R84,Auvergne-RA,1098.4177450479986,623.0478553771973,36.83277800719439
84
+ XGBoost,A,Usage de stupรฉfiants,R93,PACA,3188.272040466303,2648.81640625,9.723401167452815
85
+ XGBoost,B,Usage de stupรฉfiants,R93,PACA,3287.182530434857,1667.885518391927,81.44268047893503
86
+ XGBoost,A,Usage de stupรฉfiants,R94,Corse,319.4415996682521,295.63818359375,18.019497418195797
87
+ XGBoost,B,Usage de stupรฉfiants,R94,Corse,29.908921997822013,19.64330291748047,5.78119353166155
88
+ XGBoost,A,Cambriolages de logement,R01,Guadeloupe,153.64552248579574,150.3818359375,15.665951878110082
89
+ XGBoost,B,Cambriolages de logement,R01,Guadeloupe,153.9555704133027,149.443359375,15.57469190412557
90
+ XGBoost,A,Cambriolages de logement,R02,Martinique,682.982980530421,676.8260498046875,99.73379519633606
91
+ XGBoost,B,Cambriolages de logement,R02,Martinique,681.0224617112955,674.7113037109375,99.05781475877018
92
+ XGBoost,A,Cambriolages de logement,R03,Guyane,151.73642309953559,128.0,14.247365703929452
93
+ XGBoost,B,Cambriolages de logement,R03,Guyane,156.01251491145865,130.0,14.641325606850828
94
+ XGBoost,A,Cambriolages de logement,R04,La Rรฉunion,552.065758267488,547.151123046875,59.53705714185524
95
+ XGBoost,B,Cambriolages de logement,R04,La Rรฉunion,557.1479141509976,551.44677734375,60.97294167295413
96
+ XGBoost,A,Cambriolages de logement,R06,Mayotte,61.51354908753025,61.5,30.58391698035384
97
+ XGBoost,B,Cambriolages de logement,R06,Mayotte,110.99661561708004,103.91943359375,22.906251462716163
98
+ XGBoost,A,Cambriolages de logement,R11,รŽle-de-France,9395.896156917019,9390.59765625,23.206461240584566
99
+ XGBoost,B,Cambriolages de logement,R11,รŽle-de-France,1685.3519990529128,1499.2959899902344,33.46126093869342
100
+ XGBoost,A,Cambriolages de logement,R24,Centre-Val de Loire,1448.0780379651171,1445.3095703125,24.35388525771246
101
+ XGBoost,B,Cambriolages de logement,R24,Centre-Val de Loire,686.4568092567947,525.4661153157552,73.31209297436354
102
+ XGBoost,A,Cambriolages de logement,R27,Bourgogne-FC,2258.305861539049,2253.251953125,40.85839756921825
103
+ XGBoost,B,Cambriolages de logement,R27,Bourgogne-FC,286.3489638420793,240.74220275878906,46.55797167938391
104
+ XGBoost,A,Cambriolages de logement,R28,Normandie,1573.5433032433089,1557.51806640625,25.916711347157605
105
+ XGBoost,B,Cambriolages de logement,R28,Normandie,1128.6018593810882,804.432470703125,127.51373931298218
106
+ XGBoost,A,Cambriolages de logement,R32,Hauts-de-France,4876.194132295757,4822.37109375,29.405420381423177
107
+ XGBoost,B,Cambriolages de logement,R32,Hauts-de-France,2364.0682900513457,2061.64970703125,104.7115477794386
108
+ XGBoost,A,Cambriolages de logement,R44,Grand Est,3988.7809690799227,3972.0458984375,38.3372260059912
109
+ XGBoost,B,Cambriolages de logement,R44,Grand Est,573.1105045749442,465.0311706542969,66.66522788115968
110
+ XGBoost,A,Cambriolages de logement,R52,Pays de la Loire,1433.5366577009186,1415.927734375,13.983411145235483
111
+ XGBoost,B,Cambriolages de logement,R52,Pays de la Loire,1291.994985562443,773.2472900390625,56.4615609461441
112
+ XGBoost,A,Cambriolages de logement,R53,Bretagne,1031.5191764602255,1031.470703125,17.58422686956682
113
+ XGBoost,B,Cambriolages de logement,R53,Bretagne,426.1944461082002,393.79803466796875,29.400394188574396
114
+ XGBoost,A,Cambriolages de logement,R75,Nouvelle-Aquitaine,1880.7650570361166,1880.2734375,10.472777510460972
115
+ XGBoost,B,Cambriolages de logement,R75,Nouvelle-Aquitaine,1357.8320297542614,663.1187133789062,97.46258178029903
116
+ XGBoost,A,Cambriolages de logement,R76,Occitanie,6230.723989022738,6221.92578125,33.198522178591524
117
+ XGBoost,B,Cambriolages de logement,R76,Occitanie,1749.8157770557173,1110.4751762977014,122.23589670270643
118
+ XGBoost,A,Cambriolages de logement,R84,Auvergne-RA,6954.447163514359,6879.68359375,26.239740224630577
119
+ XGBoost,B,Cambriolages de logement,R84,Auvergne-RA,2542.609081018565,1547.7744369506836,411.0902998938486
120
+ XGBoost,A,Cambriolages de logement,R93,PACA,4938.4793645839545,4684.447265625,22.61787153678297
121
+ XGBoost,B,Cambriolages de logement,R93,PACA,3308.566714956942,2497.657511393229,431.9758502587272
122
+ XGBoost,A,Cambriolages de logement,R94,Corse,57.67166901402182,55.94659423828125,15.58421082478631
123
+ XGBoost,B,Cambriolages de logement,R94,Corse,22.667735979802163,19.65587615966797,10.657672264138155
124
+ XGBoost,A,Vols sans violence contre des personnes,R01,Guadeloupe,404.07421422384766,398.5645751953125,76.2621078491211
125
+ XGBoost,B,Vols sans violence contre des personnes,R01,Guadeloupe,462.7842482040111,462.02490234375,19.301800882588743
126
+ XGBoost,A,Vols sans violence contre des personnes,R02,Martinique,72.58182549833683,71.11871337890625,14.39239207508648
127
+ XGBoost,B,Vols sans violence contre des personnes,R02,Martinique,737.1677325203136,736.515625,46.5827853884423
128
+ XGBoost,A,Vols sans violence contre des personnes,R03,Guyane,223.61067138076442,222.0,14.542833520315071
129
+ XGBoost,B,Vols sans violence contre des personnes,R03,Guyane,517.0147243024887,516.76708984375,26.673602645369716
130
+ XGBoost,A,Vols sans violence contre des personnes,R04,La Rรฉunion,283.2043597968773,282.95001220703125,61.486863279659
131
+ XGBoost,B,Vols sans violence contre des personnes,R04,La Rรฉunion,1034.819204782652,1034.17529296875,35.40778657008654
132
+ XGBoost,A,Vols sans violence contre des personnes,R06,Mayotte,330.15795833479353,289.0744323730469,43.42388502350647
133
+ XGBoost,B,Vols sans violence contre des personnes,R06,Mayotte,123.56124827344745,120.346923828125,10.475447151837779
134
+ XGBoost,A,Vols sans violence contre des personnes,R11,รŽle-de-France,8060.760580793176,7939.484375,24.665100153806126
135
+ XGBoost,B,Vols sans violence contre des personnes,R11,รŽle-de-France,33765.924805002236,16800.752685546875,65.58287684035878
136
+ XGBoost,A,Vols sans violence contre des personnes,R24,Centre-Val de Loire,386.84254747020947,386.3251953125,31.937323830941484
137
+ XGBoost,B,Vols sans violence contre des personnes,R24,Centre-Val de Loire,1201.7337448697895,1046.2992045084636,61.86100044957824
138
+ XGBoost,A,Vols sans violence contre des personnes,R27,Bourgogne-FC,128.60427616835065,128.556640625,13.641529019565873
139
+ XGBoost,B,Vols sans violence contre des personnes,R27,Bourgogne-FC,872.2813021221223,665.1668930053711,52.81896526335377
140
+ XGBoost,A,Vols sans violence contre des personnes,R28,Normandie,755.4414120807805,746.790283203125,44.84786974424014
141
+ XGBoost,B,Vols sans violence contre des personnes,R28,Normandie,3674.3373089302713,2349.8260986328123,174.4929192741538
142
+ XGBoost,A,Vols sans violence contre des personnes,R32,Hauts-de-France,1730.803051904818,1726.35546875,37.53940371400872
143
+ XGBoost,B,Vols sans violence contre des personnes,R32,Hauts-de-France,11317.084322940907,7689.331982421875,186.4792872338464
144
+ XGBoost,A,Vols sans violence contre des personnes,R44,Grand Est,720.0089580938911,711.6337890625,32.68319243905104
145
+ XGBoost,B,Vols sans violence contre des personnes,R44,Grand Est,1991.7409505664023,1731.2148559570312,118.27205955328341
146
+ XGBoost,A,Vols sans violence contre des personnes,R52,Pays de la Loire,981.676538104717,966.579833984375,42.282677671443984
147
+ XGBoost,B,Vols sans violence contre des personnes,R52,Pays de la Loire,4405.980769350254,3247.8452392578124,92.13746981110346
148
+ XGBoost,A,Vols sans violence contre des personnes,R53,Bretagne,432.85590410042397,426.2205810546875,33.326840623001885
149
+ XGBoost,B,Vols sans violence contre des personnes,R53,Bretagne,3330.7546295532225,2972.9627685546875,90.57549039732599
150
+ XGBoost,A,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,806.6557826612479,792.30126953125,25.628167255897992
151
+ XGBoost,B,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,5700.319755906671,2854.60471089681,191.01166323408043
152
+ XGBoost,A,Vols sans violence contre des personnes,R76,Occitanie,1458.9566107888434,1452.60400390625,33.19398853908075
153
+ XGBoost,B,Vols sans violence contre des personnes,R76,Occitanie,4997.844414436627,3270.0965599646934,264.7491244662048
154
+ XGBoost,A,Vols sans violence contre des personnes,R84,Auvergne-RA,591.3703587395673,449.30908203125,7.089344229011409
155
+ XGBoost,B,Vols sans violence contre des personnes,R84,Auvergne-RA,10455.705129385606,5525.588976542155,450.2209648935216
156
+ XGBoost,A,Vols sans violence contre des personnes,R93,PACA,1762.2672267642215,1745.2236328125,28.203843859221994
157
+ XGBoost,B,Vols sans violence contre des personnes,R93,PACA,5955.461300396379,3452.813680013021,242.8883115564632
158
+ XGBoost,A,Vols sans violence contre des personnes,R94,Corse,43.393447975999536,43.10442352294922,61.511444779294145
159
+ XGBoost,B,Vols sans violence contre des personnes,R94,Corse,163.2682722543141,150.85205078125,21.032776758632455
160
+ XGBoost,A,Destructions et dรฉgradations volontaires,R01,Guadeloupe,31.643378891634224,27.5,22.003075789725955
161
+ XGBoost,B,Destructions et dรฉgradations volontaires,R01,Guadeloupe,182.67447178588597,161.0,5.53154871091266
162
+ XGBoost,A,Destructions et dรฉgradations volontaires,R02,Martinique,40.133421258078094,32.98752021789551,36.795316040815024
163
+ XGBoost,B,Destructions et dรฉgradations volontaires,R02,Martinique,74.16744014322377,72.634765625,3.2284889773308914
164
+ XGBoost,A,Destructions et dรฉgradations volontaires,R03,Guyane,8.136104425695873,7.562816619873047,17.735543916679504
165
+ XGBoost,B,Destructions et dรฉgradations volontaires,R03,Guyane,100.27033816623732,96.5,7.047561326831427
166
+ XGBoost,A,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,20.37652600736201,20.0,6.474786719808151
167
+ XGBoost,B,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,523.7837784139815,467.85595703125,10.329572111676985
168
+ XGBoost,A,Destructions et dรฉgradations volontaires,R06,Mayotte,25.486304895394127,19.0,40.66045245284554
169
+ XGBoost,B,Destructions et dรฉgradations volontaires,R06,Mayotte,615.8683138396078,615.4197998046875,35.57178796363183
170
+ XGBoost,A,Destructions et dรฉgradations volontaires,R11,รŽle-de-France,1030.1469562609466,907.49462890625,21.663693479601758
171
+ XGBoost,B,Destructions et dรฉgradations volontaires,R11,รŽle-de-France,3814.156673195527,3313.7332763671875,26.953548463576993
172
+ XGBoost,A,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,199.4379335427664,195.88067626953125,24.31270216215207
173
+ XGBoost,B,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,1055.4540975253615,879.2366739908854,33.82014687388141
174
+ XGBoost,A,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,158.28231767711378,158.2625732421875,12.506371367930512
175
+ XGBoost,B,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,707.4336158346075,611.478759765625,33.457985525683206
176
+ XGBoost,A,Destructions et dรฉgradations volontaires,R28,Normandie,296.1434039829749,280.8289794921875,25.00800510725082
177
+ XGBoost,B,Destructions et dรฉgradations volontaires,R28,Normandie,4573.502328596117,2757.6026611328125,126.6527992461792
178
+ XGBoost,A,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,968.3779410089475,955.9736328125,28.101921846683886
179
+ XGBoost,B,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,13029.16393726768,8969.0658203125,141.26534910586736
180
+ XGBoost,A,Destructions et dรฉgradations volontaires,R44,Grand Est,994.6639510066071,942.122802734375,36.04835730910268
181
+ XGBoost,B,Destructions et dรฉgradations volontaires,R44,Grand Est,2011.9921337450203,1472.7529296875,53.393889929568104
182
+ XGBoost,A,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,211.1181653602223,208.112060546875,18.642001695840584
183
+ XGBoost,B,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,3462.028439421909,2796.872521972656,66.63634295760929
184
+ XGBoost,A,Destructions et dรฉgradations volontaires,R53,Bretagne,108.9966447490589,105.20465087890625,13.827962086613017
185
+ XGBoost,B,Destructions et dรฉgradations volontaires,R53,Bretagne,1275.0305829895933,1046.9434814453125,22.075556648180566
186
+ XGBoost,A,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,142.97536392927879,133.3780517578125,9.485973143597445
187
+ XGBoost,B,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,4078.483222720171,2026.074971516927,96.71182757872278
188
+ XGBoost,A,Destructions et dรฉgradations volontaires,R76,Occitanie,610.4401707495605,592.35205078125,33.66199062604719
189
+ XGBoost,B,Destructions et dรฉgradations volontaires,R76,Occitanie,3216.1839300070337,2168.2444739708535,148.46290076887274
190
+ XGBoost,A,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,1231.4376385071137,1213.31298828125,29.725958092257613
191
+ XGBoost,B,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,2402.9983073207686,1581.0343017578125,53.736355957394224
192
+ XGBoost,A,Destructions et dรฉgradations volontaires,R93,PACA,370.54041374898134,369.323974609375,24.076155519069243
193
+ XGBoost,B,Destructions et dรฉgradations volontaires,R93,PACA,4511.729136630464,2816.9266662597656,107.44093293908416
194
+ XGBoost,A,Destructions et dรฉgradations volontaires,R94,Corse,152.87163308503136,152.13394165039062,55.58052941436955
195
+ XGBoost,B,Destructions et dรฉgradations volontaires,R94,Corse,194.6268881312361,173.6826171875,11.971253914087969
196
+ XGBoost,A,Violences sexuelles,R01,Guadeloupe,48.92539015809712,39.40423583984375,18.06099827690636
197
+ XGBoost,B,Violences sexuelles,R01,Guadeloupe,120.3578778596256,95.30880737304688,15.972830517807607
198
+ XGBoost,A,Violences sexuelles,R02,Martinique,53.73262037699731,40.77001953125,16.284034906963317
199
+ XGBoost,B,Violences sexuelles,R02,Martinique,181.02731487740127,154.70904541015625,22.402126525526977
200
+ XGBoost,A,Violences sexuelles,R03,Guyane,54.67096926174727,47.25108337402344,15.157774705153246
201
+ XGBoost,B,Violences sexuelles,R03,Guyane,70.66368953180442,67.5,10.775099958655517
202
+ XGBoost,A,Violences sexuelles,R04,La Rรฉunion,115.99278915507468,99.86654663085938,18.595145736782914
203
+ XGBoost,B,Violences sexuelles,R04,La Rรฉunion,206.9508729223895,151.48486328125,9.598434736143869
204
+ XGBoost,A,Violences sexuelles,R06,Mayotte,77.07416015516058,56.5,38.073857131705275
205
+ XGBoost,B,Violences sexuelles,R06,Mayotte,62.9274783059839,53.0,12.92219621834761
206
+ XGBoost,A,Violences sexuelles,R11,รŽle-de-France,1328.8537768231085,1048.0283203125,17.05574551319768
207
+ XGBoost,B,Violences sexuelles,R11,รŽle-de-France,873.4731975909025,512.9810180664062,19.923281558089062
208
+ XGBoost,A,Violences sexuelles,R24,Centre-Val de Loire,383.07008115187955,343.2822265625,25.182046904212253
209
+ XGBoost,B,Violences sexuelles,R24,Centre-Val de Loire,180.89193355839674,111.651917775472,18.529550938451244
210
+ XGBoost,A,Violences sexuelles,R27,Bourgogne-FC,234.51529813017976,206.31329345703125,17.88885081173815
211
+ XGBoost,B,Violences sexuelles,R27,Bourgogne-FC,130.6685335654148,94.05907154083252,22.91638440372411
212
+ XGBoost,A,Violences sexuelles,R28,Normandie,454.11565993322466,422.095703125,23.75712325700419
213
+ XGBoost,B,Violences sexuelles,R28,Normandie,423.2894102485309,232.1943786621094,20.169748366056055
214
+ XGBoost,A,Violences sexuelles,R32,Hauts-de-France,654.1736552469157,521.07861328125,16.542505775217137
215
+ XGBoost,B,Violences sexuelles,R32,Hauts-de-France,720.0992239334611,401.3382995605469,14.016696556183367
216
+ XGBoost,A,Violences sexuelles,R44,Grand Est,595.5719703678363,507.61572265625,21.476587359341696
217
+ XGBoost,B,Violences sexuelles,R44,Grand Est,287.209198255357,210.17984313964843,36.304430384434184
218
+ XGBoost,A,Violences sexuelles,R52,Pays de la Loire,517.1203983638459,432.482666015625,22.15762286590792
219
+ XGBoost,B,Violences sexuelles,R52,Pays de la Loire,440.7772038121263,297.62604064941405,28.15042849427566
220
+ XGBoost,A,Violences sexuelles,R53,Bretagne,554.5697149588025,504.853759765625,30.439299505681166
221
+ XGBoost,B,Violences sexuelles,R53,Bretagne,310.2729407598057,271.42189025878906,24.281394251341943
222
+ XGBoost,A,Violences sexuelles,R75,Nouvelle-Aquitaine,874.6184905134285,775.1983642578125,26.221398324859592
223
+ XGBoost,B,Violences sexuelles,R75,Nouvelle-Aquitaine,541.0209388512477,302.1905097961426,38.849036980024785
224
+ XGBoost,A,Violences sexuelles,R76,Occitanie,730.5488691427469,605.6644287109375,21.834998945099176
225
+ XGBoost,B,Violences sexuelles,R76,Occitanie,417.34219449549516,226.25238154484674,61.967671189456816
226
+ XGBoost,A,Violences sexuelles,R84,Auvergne-RA,819.89787071711,718.475830078125,21.367679178515466
227
+ XGBoost,B,Violences sexuelles,R84,Auvergne-RA,488.30419833354335,286.7690836588542,41.070241561158646
228
+ XGBoost,A,Violences sexuelles,R93,PACA,490.7700881502442,402.01123046875,19.049101087306394
229
+ XGBoost,B,Violences sexuelles,R93,PACA,413.62648575496235,228.4298095703125,21.006417659126633
230
+ XGBoost,A,Violences sexuelles,R94,Corse,27.90415412083997,27.452537536621094,25.4938858229907
231
+ XGBoost,B,Violences sexuelles,R94,Corse,47.15053440387491,38.56616020202637,21.15563998247051
232
+ LightGBM,A,Usage de stupรฉfiants,R01,Guadeloupe,618.7271712960406,565.75,29.906447113051914
233
+ LightGBM,B,Usage de stupรฉfiants,R01,Guadeloupe,144.10499644356543,118.5,8.362384490922695
234
+ LightGBM,A,Usage de stupรฉfiants,R02,Martinique,509.6899179893595,494.75,35.81902820290252
235
+ LightGBM,B,Usage de stupรฉfiants,R02,Martinique,329.17244720662757,288.5,28.39957047734546
236
+ LightGBM,A,Usage de stupรฉfiants,R03,Guyane,227.48406537601704,218.0,26.247712093296716
237
+ LightGBM,B,Usage de stupรฉfiants,R03,Guyane,66.80007485025746,53.5,17.765282873848236
238
+ LightGBM,A,Usage de stupรฉfiants,R04,La Rรฉunion,425.8712393435368,303.75,13.651813899575812
239
+ LightGBM,B,Usage de stupรฉfiants,R04,La Rรฉunion,115.41447049655429,114.5,7.866593600289253
240
+ LightGBM,A,Usage de stupรฉfiants,R06,Mayotte,85.26576100639693,80.0,48.049535603715164
241
+ LightGBM,B,Usage de stupรฉfiants,R06,Mayotte,22.683970111071826,19.25,13.293650793650794
242
+ LightGBM,A,Usage de stupรฉfiants,R11,รŽle-de-France,7487.8780038138975,6939.0,11.879909025669523
243
+ LightGBM,B,Usage de stupรฉfiants,R11,รŽle-de-France,2579.4925130730658,2055.28125,37.74617835355878
244
+ LightGBM,A,Usage de stupรฉfiants,R24,Centre-Val de Loire,2691.1406155197465,2589.25,21.743066370186536
245
+ LightGBM,B,Usage de stupรฉfiants,R24,Centre-Val de Loire,478.23852138167763,365.0277777777778,46.72557300386532
246
+ LightGBM,A,Usage de stupรฉfiants,R27,Bourgogne-FC,3108.4838748174325,3064.0,25.084925290765337
247
+ LightGBM,B,Usage de stupรฉfiants,R27,Bourgogne-FC,520.7365426729721,466.375,64.48363984158814
248
+ LightGBM,A,Usage de stupรฉfiants,R28,Normandie,3398.7227748082073,3335.5,25.358316200938948
249
+ LightGBM,B,Usage de stupรฉfiants,R28,Normandie,1157.6795119980313,849.7,70.27886630562121
250
+ LightGBM,A,Usage de stupรฉfiants,R32,Hauts-de-France,4510.363739489311,4317.75,19.065140787502838
251
+ LightGBM,B,Usage de stupรฉfiants,R32,Hauts-de-France,2783.0387241287176,2221.38,91.92651423166849
252
+ LightGBM,A,Usage de stupรฉfiants,R44,Grand Est,4670.775180225531,4377.499261474618,18.015442529184927
253
+ LightGBM,B,Usage de stupรฉfiants,R44,Grand Est,562.1724392027256,503.5,62.7184696010214
254
+ LightGBM,A,Usage de stupรฉfiants,R52,Pays de la Loire,4360.374295860391,4192.0,26.169308834362333
255
+ LightGBM,B,Usage de stupรฉfiants,R52,Pays de la Loire,698.4819414272642,646.99,60.05789504240232
256
+ LightGBM,A,Usage de stupรฉfiants,R53,Bretagne,3607.58818326039,3394.5,25.23117462386949
257
+ LightGBM,B,Usage de stupรฉfiants,R53,Bretagne,712.1567731414551,603.421875,33.310670650489214
258
+ LightGBM,A,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,5471.850559598505,5090.885241937642,18.901287848962003
259
+ LightGBM,B,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,418.0696689877447,295.98533522630504,35.49470997871074
260
+ LightGBM,A,Usage de stupรฉfiants,R76,Occitanie,5631.885660155449,5198.501114654548,18.258461802348126
261
+ LightGBM,B,Usage de stupรฉfiants,R76,Occitanie,1110.0185660128232,814.6646248066389,150.61025833926865
262
+ LightGBM,A,Usage de stupรฉfiants,R84,Auvergne-RA,8403.95759533734,8037.3800621986375,21.511521669549282
263
+ LightGBM,B,Usage de stupรฉfiants,R84,Auvergne-RA,1326.8968200547013,1081.3693577348974,111.8278375300906
264
+ LightGBM,A,Usage de stupรฉfiants,R93,PACA,6083.313390949048,5818.75,21.91453521873473
265
+ LightGBM,B,Usage de stupรฉfiants,R93,PACA,4445.342859542882,2770.5,134.74782298703465
266
+ LightGBM,A,Usage de stupรฉfiants,R94,Corse,447.4221300964001,430.75,26.51793160147276
267
+ LightGBM,B,Usage de stupรฉfiants,R94,Corse,43.7978309965231,39.75,12.077939877639658
268
+ LightGBM,A,Cambriolages de logement,R01,Guadeloupe,877.8153635588751,877.25,90.87416743666743
269
+ LightGBM,B,Cambriolages de logement,R01,Guadeloupe,860.0462560234769,859.25,88.85725963273165
270
+ LightGBM,A,Cambriolages de logement,R02,Martinique,547.697224751048,540.0,79.92065078926646
271
+ LightGBM,B,Cambriolages de logement,R02,Martinique,533.3327408850876,525.25,77.50210047958394
272
+ LightGBM,A,Cambriolages de logement,R03,Guyane,318.1360754457124,291.25,31.654210038711206
273
+ LightGBM,B,Cambriolages de logement,R03,Guyane,320.7733818445664,293.25,32.14327846646633
274
+ LightGBM,A,Cambriolages de logement,R04,La Rรฉunion,863.1351284706236,860.0,93.22311749903214
275
+ LightGBM,B,Cambriolages de logement,R04,La Rรฉunion,847.9848539331348,844.25,92.95062011208898
276
+ LightGBM,A,Cambriolages de logement,R06,Mayotte,125.80664728065842,109.75,62.778447227352586
277
+ LightGBM,B,Cambriolages de logement,R06,Mayotte,336.76586822301334,334.5,72.19975490196079
278
+ LightGBM,A,Cambriolages de logement,R11,รŽle-de-France,9016.77141844574,9011.25,22.269245920816
279
+ LightGBM,B,Cambriolages de logement,R11,รŽle-de-France,2174.20511089865,1976.8828125,42.67825082497904
280
+ LightGBM,A,Cambriolages de logement,R24,Centre-Val de Loire,2128.882159726085,2127.0,35.82986181670392
281
+ LightGBM,B,Cambriolages de logement,R24,Centre-Val de Loire,556.5108252416219,505.27777777777777,72.0177998947705
282
+ LightGBM,A,Cambriolages de logement,R27,Bourgogne-FC,1980.7639940184697,1975.0,35.82205018882353
283
+ LightGBM,B,Cambriolages de logement,R27,Bourgogne-FC,408.65057205277776,338.3203125,80.46843831128281
284
+ LightGBM,A,Cambriolages de logement,R28,Normandie,1992.3820071713155,1979.75,32.9053318196676
285
+ LightGBM,B,Cambriolages de logement,R28,Normandie,896.8345443837453,825.8799999999999,110.87299138433882
286
+ LightGBM,A,Cambriolages de logement,R32,Hauts-de-France,4790.793488556984,4736.0,28.882179187444322
287
+ LightGBM,B,Cambriolages de logement,R32,Hauts-de-France,3012.7308558847403,2775.98,134.3611710357569
288
+ LightGBM,A,Cambriolages de logement,R44,Grand Est,4042.926044956969,4026.4160248279613,38.86030747576165
289
+ LightGBM,B,Cambriolages de logement,R44,Grand Est,658.1285276210741,574.1928302018159,92.37056651552116
290
+ LightGBM,A,Cambriolages de logement,R52,Pays de la Loire,1051.8773989871634,1027.75,10.163164351312686
291
+ LightGBM,B,Cambriolages de logement,R52,Pays de la Loire,2038.001003434493,1707.3400000000001,183.1054421796999
292
+ LightGBM,A,Cambriolages de logement,R53,Bretagne,1424.2851057635896,1424.25,24.28010887345765
293
+ LightGBM,B,Cambriolages de logement,R53,Bretagne,443.653462210372,373.8125,30.0991825560886
294
+ LightGBM,A,Cambriolages de logement,R75,Nouvelle-Aquitaine,1076.0842462489695,1073.2653408489539,5.978294112405041
295
+ LightGBM,B,Cambriolages de logement,R75,Nouvelle-Aquitaine,1703.590454691243,1149.4978486317711,118.20757804314388
296
+ LightGBM,A,Cambriolages de logement,R76,Occitanie,6417.205905990559,6408.663717178498,34.193971451467704
297
+ LightGBM,B,Cambriolages de logement,R76,Occitanie,1516.321977088081,1263.3329931704402,288.12577284840063
298
+ LightGBM,A,Cambriolages de logement,R84,Auvergne-RA,6657.797657064633,6579.6641739845145,25.10191664100836
299
+ LightGBM,B,Cambriolages de logement,R84,Auvergne-RA,2138.3402462501476,1882.261173189334,326.6273894269917
300
+ LightGBM,A,Cambriolages de logement,R93,PACA,5797.7945160207255,5583.0,26.852750541907177
301
+ LightGBM,B,Cambriolages de logement,R93,PACA,3712.1956826733062,3070.6666666666665,563.6775119748612
302
+ LightGBM,A,Cambriolages de logement,R94,Corse,201.2375772563365,200.75,55.534380153982966
303
+ LightGBM,B,Cambriolages de logement,R94,Corse,97.71906479802189,96.125,55.89260980423762
304
+ LightGBM,A,Vols sans violence contre des personnes,R01,Guadeloupe,613.3655618797,609.75,115.85937500000001
305
+ LightGBM,B,Vols sans violence contre des personnes,R01,Guadeloupe,708.7455908152092,708.25,29.581710446557324
306
+ LightGBM,A,Vols sans violence contre des personnes,R02,Martinique,210.99881516255013,210.5,42.43255046583851
307
+ LightGBM,B,Vols sans violence contre des personnes,R02,Martinique,821.5850534180864,821.0,51.921811724728215
308
+ LightGBM,A,Vols sans violence contre des personnes,R03,Guyane,275.56226610332556,222.0,16.378941916840027
309
+ LightGBM,B,Vols sans violence contre des personnes,R03,Guyane,444.7878707878622,444.5,22.944396456693333
310
+ LightGBM,A,Vols sans violence contre des personnes,R04,La Rรฉunion,606.3687512561972,606.25,131.66456348851335
311
+ LightGBM,B,Vols sans violence contre des personnes,R04,La Rรฉunion,1277.0217304337464,1276.5,43.70077241824454
312
+ LightGBM,A,Vols sans violence contre des personnes,R06,Mayotte,213.88431452539945,159.5,21.465485577861184
313
+ LightGBM,B,Vols sans violence contre des personnes,R06,Mayotte,151.11667677658875,148.5,12.912263992716118
314
+ LightGBM,A,Vols sans violence contre des personnes,R11,รŽle-de-France,10597.9472068887,10506.0,32.57880518066887
315
+ LightGBM,B,Vols sans violence contre des personnes,R11,รŽle-de-France,32566.466420569337,24898.3671875,153.29173082742105
316
+ LightGBM,A,Vols sans violence contre des personnes,R24,Centre-Val de Loire,502.3982484045899,502.0,41.49193688651893
317
+ LightGBM,B,Vols sans violence contre des personnes,R24,Centre-Val de Loire,1396.1859063425059,1334.763888888889,96.29341356627467
318
+ LightGBM,A,Vols sans violence contre des personnes,R27,Bourgogne-FC,238.5256799592027,238.5,25.306767804353065
319
+ LightGBM,B,Vols sans violence contre des personnes,R27,Bourgogne-FC,997.0077439048555,900.0859375,92.60252163133991
320
+ LightGBM,A,Vols sans violence contre des personnes,R28,Normandie,739.5887793226719,730.75,43.894402033833444
321
+ LightGBM,B,Vols sans violence contre des personnes,R28,Normandie,2525.698394998896,2280.9300000000003,116.80477847772967
322
+ LightGBM,A,Vols sans violence contre des personnes,R32,Hauts-de-France,2521.8004604845323,2518.75,54.73671446480729
323
+ LightGBM,B,Vols sans violence contre des personnes,R32,Hauts-de-France,6472.055022363453,6146.55,148.6757440572046
324
+ LightGBM,A,Vols sans violence contre des personnes,R44,Grand Est,750.0209352705517,741.9846045196042,34.066517074664546
325
+ LightGBM,B,Vols sans violence contre des personnes,R44,Grand Est,2263.326995327211,1881.5824240112302,149.89483091546373
326
+ LightGBM,A,Vols sans violence contre des personnes,R52,Pays de la Loire,469.44781392610616,437.0,19.41523875753361
327
+ LightGBM,B,Vols sans violence contre des personnes,R52,Pays de la Loire,4521.174282473527,4245.71,165.0837781378599
328
+ LightGBM,A,Vols sans violence contre des personnes,R53,Bretagne,541.0437251276462,535.75,41.803671714386
329
+ LightGBM,B,Vols sans violence contre des personnes,R53,Bretagne,2271.015591405363,2057.65625,65.14039532335167
330
+ LightGBM,A,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,663.6016716655581,646.076565615348,20.941720087445535
331
+ LightGBM,B,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,3215.479396226591,2500.6610027977204,144.84402452872283
332
+ LightGBM,A,Vols sans violence contre des personnes,R76,Occitanie,1660.9557186893812,1655.378476194178,37.81427084350788
333
+ LightGBM,B,Vols sans violence contre des personnes,R76,Occitanie,4702.112448893014,3766.1290770173455,479.0074137090517
334
+ LightGBM,A,Vols sans violence contre des personnes,R84,Auvergne-RA,692.8155489232211,576.3272810042781,8.999293720284783
335
+ LightGBM,B,Vols sans violence contre des personnes,R84,Auvergne-RA,6666.29982936835,5109.533032380157,254.9120244199357
336
+ LightGBM,A,Vols sans violence contre des personnes,R93,PACA,2518.6456305919655,2506.75,40.44328099754533
337
+ LightGBM,B,Vols sans violence contre des personnes,R93,PACA,8251.036803537681,7219.5,437.81121110984964
338
+ LightGBM,A,Vols sans violence contre des personnes,R94,Corse,49.005739459781644,48.75,69.50259170653908
339
+ LightGBM,B,Vols sans violence contre des personnes,R94,Corse,291.27381876852576,284.5,39.063927604798934
340
+ LightGBM,A,Destructions et dรฉgradations volontaires,R01,Guadeloupe,40.329889660151565,29.5,21.21984782256759
341
+ LightGBM,B,Destructions et dรฉgradations volontaires,R01,Guadeloupe,174.0028735394907,161.0,5.572475415089427
342
+ LightGBM,A,Destructions et dรฉgradations volontaires,R02,Martinique,40.03123780249619,35.5,41.48544663767146
343
+ LightGBM,B,Destructions et dรฉgradations volontaires,R02,Martinique,69.87891312835367,68.25,3.033861369987375
344
+ LightGBM,A,Destructions et dรฉgradations volontaires,R03,Guyane,3.905124837953327,3.0,7.239231966787753
345
+ LightGBM,B,Destructions et dรฉgradations volontaires,R03,Guyane,127.284130982617,96.5,7.322428837193145
346
+ LightGBM,A,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,20.556325060671714,20.0,6.492117805205915
347
+ LightGBM,B,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,910.9666569090222,880.0,19.20320936295459
348
+ LightGBM,A,Destructions et dรฉgradations volontaires,R06,Mayotte,25.16445906432324,19.0,41.82389937106918
349
+ LightGBM,B,Destructions et dรฉgradations volontaires,R06,Mayotte,685.6528367184081,685.25,39.61012824105252
350
+ LightGBM,A,Destructions et dรฉgradations volontaires,R11,รŽle-de-France,1141.124144210436,1031.75,24.466322777920055
351
+ LightGBM,B,Destructions et dรฉgradations volontaires,R11,รŽle-de-France,4792.246376900301,4506.265625,38.34452508129922
352
+ LightGBM,A,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,226.87069555145283,223.75,27.74161863070314
353
+ LightGBM,B,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,1235.4583157678774,1120.5555555555554,55.30864309709068
354
+ LightGBM,A,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,29.605742686174924,29.5,2.3314937895102292
355
+ LightGBM,B,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,1174.9025075910554,1073.984375,65.54387762251588
356
+ LightGBM,A,Destructions et dรฉgradations volontaires,R28,Normandie,272.47763669703244,255.75,22.833632667082373
357
+ LightGBM,B,Destructions et dรฉgradations volontaires,R28,Normandie,2771.135679193641,2474.2100000000005,80.31458783717815
358
+ LightGBM,A,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,1155.6244253649193,1145.25,33.625742793147026
359
+ LightGBM,B,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,8171.712389089572,7314.5599999999995,109.25114455583926
360
+ LightGBM,A,Destructions et dรฉgradations volontaires,R44,Grand Est,849.911513816767,787.7744482517243,30.365504207390153
361
+ LightGBM,B,Destructions et dรฉgradations volontaires,R44,Grand Est,2349.5648681771477,2070.0194220275876,91.39510044277218
362
+ LightGBM,A,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,269.8453260666191,267.5,23.933260480637465
363
+ LightGBM,B,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,3193.899605497956,2765.08,82.0939281348329
364
+ LightGBM,A,Destructions et dรฉgradations volontaires,R53,Bretagne,36.46659430218292,28.5,3.818440331598226
365
+ LightGBM,B,Destructions et dรฉgradations volontaires,R53,Bretagne,1703.0772195132552,1466.5,32.46718965751824
366
+ LightGBM,A,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,54.0320455566108,44.2178367578166,3.0689874154865446
367
+ LightGBM,B,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,2859.7045351293386,1995.0076494366656,84.11444098535976
368
+ LightGBM,A,Destructions et dรฉgradations volontaires,R76,Occitanie,448.92241531225085,424.87297637080883,24.317568041513717
369
+ LightGBM,B,Destructions et dรฉgradations volontaires,R76,Occitanie,3146.4660898506113,2513.899050464984,198.2277589404635
370
+ LightGBM,A,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,1144.834199450831,1125.8197834987052,27.597571047325165
371
+ LightGBM,B,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,3673.5565260506864,3132.5727047749715,124.34300570618073
372
+ LightGBM,A,Destructions et dรฉgradations volontaires,R93,PACA,405.1123301011708,404.0,26.333100286304838
373
+ LightGBM,B,Destructions et dรฉgradations volontaires,R93,PACA,7468.4708576380535,6014.597222222223,257.4764566147486
374
+ LightGBM,A,Destructions et dรฉgradations volontaires,R94,Corse,66.4647462945583,64.75,23.825887743413517
375
+ LightGBM,B,Destructions et dรฉgradations volontaires,R94,Corse,212.81814419828024,184.875,12.802733715855656
376
+ LightGBM,A,Violences sexuelles,R01,Guadeloupe,63.28556312461792,56.25,26.709881320949435
377
+ LightGBM,B,Violences sexuelles,R01,Guadeloupe,159.0070753142765,141.0,24.51997402758024
378
+ LightGBM,A,Violences sexuelles,R02,Martinique,81.85963596303125,74.0,31.63403316756487
379
+ LightGBM,B,Violences sexuelles,R02,Martinique,252.63857583512458,234.5,35.08228850778398
380
+ LightGBM,A,Violences sexuelles,R03,Guyane,96.2616876020777,92.25,30.413817663817667
381
+ LightGBM,B,Violences sexuelles,R03,Guyane,171.58470940034255,157.75,24.842316513761467
382
+ LightGBM,A,Violences sexuelles,R04,La Rรฉunion,157.7024492517475,146.25,27.86934865598183
383
+ LightGBM,B,Violences sexuelles,R04,La Rรฉunion,354.4976198791749,325.25,21.705145404189025
384
+ LightGBM,A,Violences sexuelles,R06,Mayotte,76.44932962426813,56.5,38.748706004140786
385
+ LightGBM,B,Violences sexuelles,R06,Mayotte,107.0420478129973,93.0,22.917837473305607
386
+ LightGBM,A,Violences sexuelles,R11,รŽle-de-France,2148.870691782081,1987.5,34.32236795487439
387
+ LightGBM,B,Violences sexuelles,R11,รŽle-de-France,931.6451175206147,519.375,19.626257932934475
388
+ LightGBM,A,Violences sexuelles,R24,Centre-Val de Loire,568.51231297132,542.5,40.81042926639849
389
+ LightGBM,B,Violences sexuelles,R24,Centre-Val de Loire,322.89073282957844,241.11805555555557,36.414059953011964
390
+ LightGBM,A,Violences sexuelles,R27,Bourgogne-FC,410.4354395029747,395.0,35.1961702765495
391
+ LightGBM,B,Violences sexuelles,R27,Bourgogne-FC,221.16313840480402,177.79296875,39.19424298550034
392
+ LightGBM,A,Violences sexuelles,R28,Normandie,717.0870327233648,697.25,39.86468309251949
393
+ LightGBM,B,Violences sexuelles,R28,Normandie,488.6684689029977,368.76,35.378098596018035
394
+ LightGBM,A,Violences sexuelles,R32,Hauts-de-France,1169.8808700034376,1101.0,37.09905782487352
395
+ LightGBM,B,Violences sexuelles,R32,Hauts-de-France,1305.9943654166354,954.3299999999999,50.438072259561004
396
+ LightGBM,A,Violences sexuelles,R44,Grand Est,713.0633059518099,641.425777697564,27.6759617401964
397
+ LightGBM,B,Violences sexuelles,R44,Grand Est,378.41757028279574,309.8939378699064,49.80467628355162
398
+ LightGBM,A,Violences sexuelles,R52,Pays de la Loire,789.8796189926665,737.25,39.57576664295009
399
+ LightGBM,B,Violences sexuelles,R52,Pays de la Loire,613.196145209671,441.59,40.71689993263023
400
+ LightGBM,A,Violences sexuelles,R53,Bretagne,814.9811347509831,782.0,48.32873844241152
401
+ LightGBM,B,Violences sexuelles,R53,Bretagne,448.67438429778895,390.90625,34.015804618779505
402
+ LightGBM,A,Violences sexuelles,R75,Nouvelle-Aquitaine,995.0194020996539,908.8666626930229,31.113675408072783
403
+ LightGBM,B,Violences sexuelles,R75,Nouvelle-Aquitaine,472.451549758798,257.3772209490404,41.58350851967345
404
+ LightGBM,A,Violences sexuelles,R76,Occitanie,871.3430337234544,769.6534495592108,28.466810868473814
405
+ LightGBM,B,Violences sexuelles,R76,Occitanie,466.5024702538944,322.8847264084275,81.7740570113717
406
+ LightGBM,A,Violences sexuelles,R84,Auvergne-RA,1002.4248719054767,921.3200441837307,27.842188954013107
407
+ LightGBM,B,Violences sexuelles,R84,Auvergne-RA,450.9543095376268,310.18656433056543,46.44418250232703
408
+ LightGBM,A,Violences sexuelles,R93,PACA,762.3742519261783,708.5,35.217705180628684
409
+ LightGBM,B,Violences sexuelles,R93,PACA,763.7657936173889,608.0833333333334,118.55257219525718
410
+ LightGBM,A,Violences sexuelles,R94,Corse,41.551925346486655,41.25,38.41692927170868
411
+ LightGBM,B,Violences sexuelles,R94,Corse,59.64059020499378,49.5,27.223054661324834
data/delinquance_previsions_2030.csv ADDED
The diff for this file is too large to render. See raw diff
 
data/delinquance_region.csv ADDED
The diff for this file is too large to render. See raw diff
 
data/regions.geojson ADDED
The diff for this file is too large to render. See raw diff
 
files/Delinquance.py ADDED
@@ -0,0 +1,703 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import plotly.express as px
5
+ import plotly.graph_objects as go
6
+ import os
7
+ import json
8
+ import requests
9
+
10
+ st.set_page_config(
11
+ page_title="Oasis - Crime & Delinquency",
12
+ page_icon=":rotating_light:",
13
+ layout="wide",
14
+ initial_sidebar_state="expanded",
15
+ )
16
+
17
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
18
+ # CONSTANTES
19
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
20
+ DATA_DIR = os.path.join(os.path.dirname(__file__), '..', 'data')
21
+
22
+ REG_NAMES = {
23
+ 'R11': 'รŽle-de-France', 'R24': 'Centre-Val de Loire',
24
+ 'R27': 'Bourgogne-FC', 'R28': 'Normandie',
25
+ 'R32': 'Hauts-de-France', 'R44': 'Grand Est',
26
+ 'R52': 'Pays de la Loire', 'R53': 'Bretagne',
27
+ 'R75': 'Nouvelle-Aquitaine', 'R76': 'Occitanie',
28
+ 'R84': 'Auvergne-RA', 'R93': 'PACA',
29
+ 'R94': 'Corse',
30
+ 'R01': 'Guadeloupe', 'R02': 'Martinique', 'R03': 'Guyane',
31
+ 'R04': 'La Rรฉunion', 'R06': 'Mayotte',
32
+ }
33
+ METRO_REGIONS = [
34
+ 'R11','R24','R27','R28','R32','R44',
35
+ 'R52','R53','R75','R76','R84','R93','R94',
36
+ ]
37
+ MODELE_COLORS = {
38
+ 'Prophet': '#EF553B', 'XGBoost': '#636EFA', 'LightGBM': '#00CC96',
39
+ }
40
+
41
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
42
+ # CHARGEMENT
43
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
44
+ @st.cache_data
45
+ def load_data():
46
+ hist = pd.read_csv(os.path.join(DATA_DIR, 'delinquance_region.csv'))
47
+ prev = pd.read_csv(os.path.join(DATA_DIR, 'delinquance_previsions_2030.csv'))
48
+ bench = pd.read_csv(os.path.join(DATA_DIR, 'delinquance_benchmark.csv'))
49
+ return hist, prev, bench
50
+
51
+ @st.cache_data
52
+ def load_geojson():
53
+ local = os.path.join(DATA_DIR, 'regions.geojson')
54
+ if os.path.exists(local):
55
+ with open(local) as f:
56
+ return json.load(f)
57
+ url = (
58
+ "https://raw.githubusercontent.com/gregoiredavid/"
59
+ "france-geojson/master/regions-version-simplifiee.geojson"
60
+ )
61
+ return requests.get(url, timeout=10).json()
62
+
63
+ with st.spinner("Loading data and preparing maps..."):
64
+ df_hist, df_prev, df_bench = load_data()
65
+ geojson_regions = load_geojson()
66
+
67
+ ALL_CRIMES = sorted(df_hist['indicateur'].dropna().unique())
68
+ ALL_REGIONS = sorted(
69
+ [r for r in df_hist['region'].dropna().unique() if r in METRO_REGIONS],
70
+ key=lambda r: REG_NAMES.get(r, r)
71
+ )
72
+ YEARS_HIST = sorted(df_hist['annee'].dropna().unique().astype(int))
73
+
74
+
75
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
76
+ # HELPERS
77
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
78
+ def make_choropleth(df_map, color_col, title, colorscale='Reds',
79
+ label='Nb of facts', opacity=0.7, range_color=None):
80
+ """Carte choroplรจthe statique (une seule annรฉe)."""
81
+ df_plot = df_map.copy()
82
+ df_plot['code_insee'] = df_plot['region'].str.replace('R', '', regex=False)
83
+ kwargs = dict(
84
+ geojson=geojson_regions,
85
+ locations='code_insee',
86
+ featureidkey='properties.code',
87
+ color=color_col,
88
+ color_continuous_scale=colorscale,
89
+ hover_name='region_label',
90
+ hover_data={color_col: ':,.1f', 'code_insee': False},
91
+ mapbox_style='carto-positron',
92
+ zoom=4.5,
93
+ center={'lat': 46.5, 'lon': 2.5},
94
+ opacity=opacity,
95
+ title=title,
96
+ labels={color_col: label},
97
+ )
98
+ if range_color:
99
+ kwargs['range_color'] = range_color
100
+ fig = px.choropleth_mapbox(df_plot, **kwargs)
101
+ fig.update_layout(
102
+ height=520,
103
+ margin=dict(l=0, r=0, t=40, b=0),
104
+ coloraxis_colorbar=dict(title=label),
105
+ )
106
+ return fig
107
+
108
+
109
+ def make_animated_choropleth(df_all_years, color_col, title,
110
+ colorscale='Reds', label='Nb of facts',
111
+ opacity=0.7, range_color=None):
112
+ """
113
+ Carte choroplรจthe ANIMร‰E.
114
+
115
+ Clรฉ du fonctionnement : chaque rรฉgion doit รชtre prรฉsente dans CHAQUE
116
+ frame. On force cela avec un reindex complet (produit cartรฉsien
117
+ annรฉes ร— rรฉgions) avant de passer ร  Plotly.
118
+ """
119
+ df = df_all_years.copy()
120
+ df['code_insee'] = df['region'].str.replace('R', '', regex=False)
121
+ df['region_label'] = df['region'].map(REG_NAMES)
122
+
123
+ # โ”€โ”€ Garantir que toutes les rรฉgions sont prรฉsentes dans chaque frame โ”€โ”€
124
+ all_years = sorted(df['annee'].unique())
125
+ all_regions = df['region'].unique()
126
+ index_full = pd.MultiIndex.from_product(
127
+ [all_years, all_regions], names=['annee', 'region']
128
+ )
129
+ df_full = (
130
+ df.set_index(['annee', 'region'])
131
+ .reindex(index_full, fill_value=0)
132
+ .reset_index()
133
+ )
134
+ # Re-remplir les colonnes dรฉrivรฉes aprรจs reindex
135
+ df_full['code_insee'] = df_full['region'].str.replace('R', '', regex=False)
136
+ df_full['region_label'] = df_full['region'].map(REG_NAMES)
137
+ df_full['annee_str'] = df_full['annee'].astype(str)
138
+
139
+ if range_color is None:
140
+ range_color = [0, df_full[color_col].max()]
141
+
142
+ fig = px.choropleth_mapbox(
143
+ df_full.sort_values('annee'),
144
+ geojson=geojson_regions,
145
+ locations='code_insee',
146
+ featureidkey='properties.code',
147
+ color=color_col,
148
+ color_continuous_scale=colorscale,
149
+ range_color=range_color,
150
+ hover_name='region_label',
151
+ hover_data={color_col: ':,.0f', 'code_insee': False, 'annee_str': False},
152
+ animation_frame='annee_str',
153
+ animation_group='code_insee',
154
+ category_orders={'annee_str': [str(y) for y in all_years]},
155
+ mapbox_style='carto-positron',
156
+ zoom=4.5,
157
+ center={'lat': 46.5, 'lon': 2.5},
158
+ opacity=opacity,
159
+ title=title,
160
+ labels={color_col: label},
161
+ )
162
+ fig.update_layout(
163
+ height=580,
164
+ margin=dict(l=0, r=0, t=40, b=0),
165
+ coloraxis_colorbar=dict(title=label),
166
+ )
167
+ # Vitesse de l'animation : 800 ms par frame
168
+ fig.layout.updatemenus[0].buttons[0].args[1]['frame']['duration'] = 800
169
+ fig.layout.updatemenus[0].buttons[0].args[1]['transition']['duration'] = 300
170
+ return fig
171
+
172
+
173
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
174
+ # SIDEBAR
175
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
176
+ with st.sidebar:
177
+ st.image(
178
+ "https://raw.githubusercontent.com/nclsprsnw/oasis/refs/heads/main/docs/images/oasis_logo.png",
179
+ width=120,
180
+ )
181
+ st.markdown("## ๐Ÿšจ Crime & Delinquency")
182
+ st.markdown("---")
183
+ section = st.radio(
184
+ "Navigate to",
185
+ options=[
186
+ "๐Ÿ—บ๏ธ An overview of crime in France",
187
+ "๐Ÿ“ˆ Top 7 Regions with Highest Variation",
188
+ "๐Ÿ† Top & Bottom 5 Regions",
189
+ "๐Ÿ“Š Historical by Region",
190
+ "โš ๏ธ Crime Risk Scores by Region",
191
+ "๐Ÿ”ฎ Predictions 2022-2030",
192
+ "๐Ÿ“‹ Model Performance",
193
+ ],
194
+ label_visibility="collapsed",
195
+ key="nav_section",
196
+ )
197
+ st.markdown("---")
198
+ st.caption("Data: Police Nationale + Gendarmerie Nationale ยท 2012-2021")
199
+
200
+ st.header("Crime & Delinquency in France (2012-2030)")
201
+
202
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
203
+ # SECTION 1 โ€” AN OVERVIEW (animรฉe)
204
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
205
+ if section == "๐Ÿ—บ๏ธ An overview of crime in France":
206
+ st.subheader("An overview of crime in France", divider=True)
207
+ st.write(
208
+ "This map shows the total number of recorded crimes per region. "
209
+ "Press **Play** or drag the slider below the map to animate 2012โ€“2021."
210
+ )
211
+
212
+ crime_mode = st.radio(
213
+ "Crime selection",
214
+ ["All crimes", "Select specific crimes"],
215
+ horizontal=True,
216
+ key="overview_mode",
217
+ )
218
+ if crime_mode == "Select specific crimes":
219
+ crimes_sel = st.multiselect(
220
+ "Select crimes / offences", ALL_CRIMES,
221
+ default=ALL_CRIMES[:3], key="crimes_overview",
222
+ )
223
+ else:
224
+ crimes_sel = ALL_CRIMES
225
+
226
+ # Agrรฉger toutes les annรฉes
227
+ df_anim = (
228
+ df_hist[
229
+ (df_hist['indicateur'].isin(crimes_sel)) &
230
+ (df_hist['region'].isin(METRO_REGIONS))
231
+ ]
232
+ .groupby(['annee', 'region'])['nb_faits_A'].sum()
233
+ .reset_index()
234
+ )
235
+
236
+ fig_overview = make_animated_choropleth(
237
+ df_anim, 'nb_faits_A',
238
+ title="Total recorded crimes by region",
239
+ colorscale='Reds',
240
+ label='Nb of facts',
241
+ )
242
+ st.plotly_chart(fig_overview, use_container_width=True)
243
+ st.write(
244
+ "Colour intensity reflects the total number of recorded facts. "
245
+ "Regions with no data appear in light grey."
246
+ )
247
+
248
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
249
+ # SECTION 2 โ€” TOP 7 VARIATION
250
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
251
+ elif section == "๐Ÿ“ˆ Top 7 Regions with Highest Variation":
252
+ st.subheader("Top 7 Regions with Highest Variation", divider=True)
253
+ st.write("Select the period and the crimes to view the top 7 regions with the highest variation.")
254
+
255
+ left_co, right_co = st.columns(2)
256
+ with left_co:
257
+ selected_year_1 = st.selectbox(
258
+ "Select Year 1", options=YEARS_HIST, index=0, key="year_select_1"
259
+ )
260
+ with right_co:
261
+ selected_year_2 = st.selectbox(
262
+ "Select Year 2", options=YEARS_HIST,
263
+ index=len(YEARS_HIST)-1, key="year_select_2"
264
+ )
265
+
266
+ crime_mode_var = st.radio(
267
+ "Crime selection", ["All crimes", "Select specific crimes"],
268
+ horizontal=True, key="var_mode",
269
+ )
270
+ if crime_mode_var == "Select specific crimes":
271
+ crimes_var = st.multiselect(
272
+ "Select crimes / offences", ALL_CRIMES,
273
+ default=ALL_CRIMES[:3], key="crimes_var",
274
+ )
275
+ else:
276
+ crimes_var = ALL_CRIMES
277
+
278
+ def get_region_total(year, crimes):
279
+ return (
280
+ df_hist[
281
+ (df_hist['annee'] == year) &
282
+ (df_hist['indicateur'].isin(crimes)) &
283
+ (df_hist['region'].isin(METRO_REGIONS))
284
+ ]
285
+ .groupby('region')['nb_faits_A'].sum()
286
+ .reset_index()
287
+ .rename(columns={'nb_faits_A': f'total_{year}'})
288
+ )
289
+
290
+ df_y1 = get_region_total(selected_year_1, crimes_var)
291
+ df_y2 = get_region_total(selected_year_2, crimes_var)
292
+ variation_data = pd.merge(df_y1, df_y2, on='region', how='outer').fillna(0)
293
+ variation_data['difference'] = (
294
+ variation_data[f'total_{selected_year_2}'] - variation_data[f'total_{selected_year_1}']
295
+ )
296
+ variation_data['variation_%'] = np.where(
297
+ variation_data[f'total_{selected_year_1}'] > 0,
298
+ variation_data['difference'] / variation_data[f'total_{selected_year_1}'] * 100,
299
+ 0,
300
+ )
301
+ variation_data['region_label'] = variation_data['region'].map(REG_NAMES)
302
+ top7 = variation_data.sort_values('difference', ascending=False).head(7)
303
+
304
+ fig_var = px.bar(
305
+ top7.sort_values('variation_%', ascending=True),
306
+ x='region_label', y='variation_%',
307
+ title=f"Top 7 Regions by Crime Variation ({selected_year_1} to {selected_year_2})",
308
+ labels={'region_label': 'Region', 'variation_%': 'Variation (%)'},
309
+ color='variation_%',
310
+ color_continuous_scale=px.colors.sequential.Reds,
311
+ )
312
+ st.plotly_chart(fig_var, use_container_width=True)
313
+
314
+ display_top7 = top7[[
315
+ 'region_label', 'region',
316
+ f'total_{selected_year_1}', f'total_{selected_year_2}',
317
+ 'difference', 'variation_%',
318
+ ]].copy()
319
+ display_top7.columns = [
320
+ 'Region', 'Code',
321
+ f'Total {selected_year_1}', f'Total {selected_year_2}',
322
+ 'Abs. Change', 'Change (%)',
323
+ ]
324
+ display_top7['Change (%)'] = display_top7['Change (%)'].map('{:,.2f}%'.format)
325
+ st.dataframe(display_top7, hide_index=True, use_container_width=True)
326
+
327
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
328
+ # SECTION 3 โ€” TOP & BOTTOM 5
329
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
330
+ elif section == "๐Ÿ† Top & Bottom 5 Regions":
331
+ st.subheader("Top & Bottom 5 Regions", divider=True)
332
+ st.write("Select a year and the crimes to compare the most and least affected regions.")
333
+
334
+ col1, col2 = st.columns(2)
335
+ with col1:
336
+ year_tb = st.selectbox(
337
+ "Select Year", options=YEARS_HIST,
338
+ index=len(YEARS_HIST)-1, key="year_topbottom"
339
+ )
340
+ with col2:
341
+ crime_mode_tb = st.radio(
342
+ "Crime selection", ["All crimes", "Select specific crimes"],
343
+ horizontal=True, key="tb_mode",
344
+ )
345
+
346
+ if crime_mode_tb == "Select specific crimes":
347
+ crimes_tb = st.multiselect(
348
+ "Select crimes / offences", ALL_CRIMES,
349
+ default=ALL_CRIMES[:3], key="crimes_tb",
350
+ )
351
+ else:
352
+ crimes_tb = ALL_CRIMES
353
+
354
+ df_tb = (
355
+ df_hist[
356
+ (df_hist['annee'] == year_tb) &
357
+ (df_hist['indicateur'].isin(crimes_tb)) &
358
+ (df_hist['region'].isin(METRO_REGIONS))
359
+ ]
360
+ .groupby('region')['nb_faits_A'].sum()
361
+ .reset_index()
362
+ .sort_values('nb_faits_A', ascending=False)
363
+ )
364
+ df_tb['region_label'] = df_tb['region'].map(REG_NAMES)
365
+
366
+ combined = pd.concat([
367
+ df_tb.head(5).assign(category='Top 5'),
368
+ df_tb.tail(5).assign(category='Bottom 5'),
369
+ ])
370
+
371
+ fig_tb = px.bar(
372
+ combined.sort_values('nb_faits_A', ascending=True),
373
+ x='nb_faits_A', y='region_label',
374
+ color='category', orientation='h',
375
+ title=f"Top & Bottom 5 Regions โ€” {year_tb}",
376
+ labels={'nb_faits_A': 'Nb of facts', 'region_label': 'Region', 'category': ''},
377
+ color_discrete_map={'Top 5': '#EF553B', 'Bottom 5': '#00CC96'},
378
+ text='nb_faits_A',
379
+ )
380
+ fig_tb.update_traces(texttemplate='%{text:,.0f}', textposition='outside')
381
+ fig_tb.update_layout(height=400, plot_bgcolor='#fafafa')
382
+ st.plotly_chart(fig_tb, use_container_width=True)
383
+
384
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
385
+ # SECTION 4 โ€” HISTORICAL BY REGION
386
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
387
+ elif section == "๐Ÿ“Š Historical by Region":
388
+ st.subheader("Select Region(s) to View Historical Crimes", divider=True)
389
+ st.write(
390
+ "Select one or more regions and the crimes to explore the historical "
391
+ "evolution from 2012 to 2021."
392
+ )
393
+
394
+ col_r, col_c = st.columns(2)
395
+ with col_r:
396
+ regions_sel = st.multiselect(
397
+ "Select Region(s)", ALL_REGIONS,
398
+ default=ALL_REGIONS[:2],
399
+ format_func=lambda r: REG_NAMES.get(r, r),
400
+ key="regions_hist",
401
+ )
402
+ with col_c:
403
+ crime_mode_hist = st.radio(
404
+ "Crime selection", ["All crimes", "Select specific crimes"],
405
+ horizontal=True, key="hist_mode",
406
+ )
407
+
408
+ if crime_mode_hist == "Select specific crimes":
409
+ crimes_hist = st.multiselect(
410
+ "Select crimes / offences", ALL_CRIMES,
411
+ default=ALL_CRIMES[:3], key="crimes_hist",
412
+ )
413
+ else:
414
+ crimes_hist = ALL_CRIMES
415
+
416
+ if regions_sel:
417
+ df_hist_sel = (
418
+ df_hist[
419
+ (df_hist['region'].isin(regions_sel)) &
420
+ (df_hist['indicateur'].isin(crimes_hist))
421
+ ]
422
+ .groupby(['annee', 'region'])['nb_faits_A'].sum()
423
+ .reset_index()
424
+ )
425
+ df_hist_sel['region_label'] = df_hist_sel['region'].map(REG_NAMES)
426
+
427
+ fig_line = px.line(
428
+ df_hist_sel.sort_values('annee'),
429
+ x='annee', y='nb_faits_A', color='region_label',
430
+ markers=True,
431
+ title="Historical evolution of recorded crimes by region",
432
+ labels={
433
+ 'annee': 'Year', 'nb_faits_A': 'Nb of facts',
434
+ 'region_label': 'Region'
435
+ },
436
+ )
437
+ fig_line.update_layout(height=420, hovermode='x unified')
438
+ st.plotly_chart(fig_line, use_container_width=True)
439
+ else:
440
+ st.info("Select at least one region to display the chart.")
441
+
442
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
443
+ # SECTION 5 โ€” CRIME RISK SCORES (animรฉe)
444
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
445
+ elif section == "โš ๏ธ Crime Risk Scores by Region":
446
+ st.subheader("Crime Risk Scores by Region", divider=True)
447
+ st.write(
448
+ "Crime intensity score normalised 0โ€“100 per year. "
449
+ "Press **Play** or drag the slider to animate 2012โ€“2021."
450
+ )
451
+
452
+ crime_mode_risk = st.radio(
453
+ "Crime selection", ["All crimes", "Select specific crimes"],
454
+ horizontal=True, key="risk_mode",
455
+ )
456
+ if crime_mode_risk == "Select specific crimes":
457
+ crimes_risk = st.multiselect(
458
+ "Select crimes / offences", ALL_CRIMES,
459
+ default=ALL_CRIMES[:5], key="crimes_risk",
460
+ )
461
+ else:
462
+ crimes_risk = ALL_CRIMES
463
+
464
+ # Agrรฉger toutes les annรฉes
465
+ df_risk_all = (
466
+ df_hist[
467
+ (df_hist['indicateur'].isin(crimes_risk)) &
468
+ (df_hist['region'].isin(METRO_REGIONS))
469
+ ]
470
+ .groupby(['annee', 'region'])['nb_faits_A'].sum()
471
+ .reset_index()
472
+ )
473
+
474
+ # Score 0-100 normalisรฉ ANNร‰E PAR ANNร‰E
475
+ scores = []
476
+ for yr in sorted(df_risk_all['annee'].unique()):
477
+ sub = df_risk_all[df_risk_all['annee'] == yr].copy()
478
+ vmin = sub['nb_faits_A'].min()
479
+ vmax = sub['nb_faits_A'].max()
480
+ sub['score'] = np.where(
481
+ vmax > vmin,
482
+ (sub['nb_faits_A'] - vmin) / (vmax - vmin) * 100,
483
+ 50,
484
+ ).round(1)
485
+ scores.append(sub)
486
+ df_risk_scored = pd.concat(scores, ignore_index=True)
487
+
488
+ fig_risk_anim = make_animated_choropleth(
489
+ df_risk_scored, 'score',
490
+ title="Crime Risk Score by Region (0 = lowest, 100 = highest)",
491
+ colorscale='RdYlGn_r',
492
+ label='Risk Score (0-100)',
493
+ range_color=[0, 100],
494
+ )
495
+ st.plotly_chart(fig_risk_anim, use_container_width=True)
496
+
497
+ # Barres + heatmap sur l'annรฉe sรฉlectionnรฉe
498
+ year_risk = st.select_slider(
499
+ "Select a year for detailed view",
500
+ options=YEARS_HIST, value=YEARS_HIST[-1], key="year_risk"
501
+ )
502
+ df_risk_yr = df_risk_scored[df_risk_scored['annee'] == year_risk].copy()
503
+ df_risk_yr['region_label'] = df_risk_yr['region'].map(REG_NAMES)
504
+
505
+ fig_risk_bar = px.bar(
506
+ df_risk_yr.sort_values('score', ascending=True),
507
+ x='score', y='region_label', orientation='h',
508
+ color='score', color_continuous_scale='RdYlGn_r',
509
+ title=f"Crime Risk Score ranking โ€” {year_risk}",
510
+ labels={'score': 'Risk Score (0-100)', 'region_label': 'Region'},
511
+ text='score',
512
+ )
513
+ fig_risk_bar.update_traces(texttemplate='%{text:.1f}', textposition='outside')
514
+ fig_risk_bar.update_layout(
515
+ height=420, coloraxis_showscale=False, plot_bgcolor='#fafafa'
516
+ )
517
+ st.plotly_chart(fig_risk_bar, use_container_width=True)
518
+
519
+ if crime_mode_risk == "Select specific crimes" and len(crimes_risk) > 1:
520
+ st.write("**Crime breakdown by region**")
521
+ pivot_risk = (
522
+ df_hist[
523
+ (df_hist['annee'] == year_risk) &
524
+ (df_hist['indicateur'].isin(crimes_risk)) &
525
+ (df_hist['region'].isin(METRO_REGIONS))
526
+ ]
527
+ .groupby(['region', 'indicateur'])['nb_faits_A'].sum()
528
+ .unstack('indicateur').fillna(0)
529
+ )
530
+ pivot_risk.index = pivot_risk.index.map(REG_NAMES)
531
+ pivot_risk.columns = [c[:35] for c in pivot_risk.columns]
532
+ fig_heat = px.imshow(
533
+ pivot_risk, color_continuous_scale='Reds',
534
+ labels=dict(color='Nb of facts'),
535
+ title=f"Crime profile by region โ€” {year_risk}",
536
+ aspect='auto', text_auto='.0f',
537
+ )
538
+ fig_heat.update_layout(height=420)
539
+ st.plotly_chart(fig_heat, use_container_width=True)
540
+
541
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
542
+ # SECTION 6 โ€” PREDICTIONS 2022-2030
543
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
544
+ elif section == "๐Ÿ”ฎ Predictions 2022-2030":
545
+ st.subheader("Predictions 2022-2030", divider=True)
546
+ st.write(
547
+ "Forecasts using Prophet, XGBoost, and LightGBM โ€” "
548
+ "trained on 2012-2019, validated on 2020-2021."
549
+ )
550
+
551
+ col_p1, col_p2 = st.columns(2)
552
+ with col_p1:
553
+ region_pred = st.selectbox(
554
+ "Select Region", ALL_REGIONS,
555
+ format_func=lambda r: REG_NAMES.get(r, r), key="region_pred"
556
+ )
557
+ with col_p2:
558
+ crime_pred = st.selectbox(
559
+ "Select Crime / Offence", ALL_CRIMES, key="crime_pred"
560
+ )
561
+
562
+ modeles_pred = st.multiselect(
563
+ "Models to display", ['Prophet', 'XGBoost', 'LightGBM'],
564
+ default=['Prophet', 'XGBoost', 'LightGBM'], key="modeles_pred"
565
+ )
566
+
567
+ hist_pred = (
568
+ df_hist[
569
+ (df_hist['indicateur'] == crime_pred) &
570
+ (df_hist['region'] == region_pred)
571
+ ]
572
+ .groupby('annee')['nb_faits_A'].sum()
573
+ .reset_index()
574
+ )
575
+
576
+ fig_pred = go.Figure()
577
+ fig_pred.add_trace(go.Scatter(
578
+ x=hist_pred['annee'], y=hist_pred['nb_faits_A'],
579
+ mode='lines+markers', name='Historical (2012-2021)',
580
+ line=dict(color='#2c3e50', width=3), marker=dict(size=8),
581
+ ))
582
+
583
+ for modele in modeles_pred:
584
+ prev_serie = df_prev[
585
+ (df_prev['indicateur'] == crime_pred) &
586
+ (df_prev['region'] == region_pred) &
587
+ (df_prev['source_modele'] == modele) &
588
+ (df_prev['annee'] >= 2022)
589
+ ].sort_values('annee')
590
+
591
+ if len(prev_serie) == 0:
592
+ continue
593
+
594
+ color = MODELE_COLORS.get(modele, '#999')
595
+
596
+ if modele == 'Prophet' and prev_serie['yhat_lower'].notna().any():
597
+ fig_pred.add_trace(go.Scatter(
598
+ x=pd.concat([prev_serie['annee'], prev_serie['annee'][::-1]]),
599
+ y=pd.concat([prev_serie['yhat_upper'], prev_serie['yhat_lower'][::-1]]),
600
+ fill='toself',
601
+ fillcolor=f'rgba{tuple(list(px.colors.hex_to_rgb(color)) + [0.12])}',
602
+ line=dict(color='rgba(0,0,0,0)'),
603
+ showlegend=False, name=f'{modele} CI',
604
+ ))
605
+
606
+ fig_pred.add_trace(go.Scatter(
607
+ x=prev_serie['annee'], y=prev_serie['yhat'],
608
+ mode='lines+markers', name=f'{modele} forecast',
609
+ line=dict(color=color, width=2.5, dash='dash'),
610
+ marker=dict(size=7),
611
+ ))
612
+
613
+ fig_pred.add_vline(x=2021.5, line_dash='dot', line_color='gray', opacity=0.5)
614
+ fig_pred.add_annotation(
615
+ x=2022, y=1, yref='paper',
616
+ text='โ† Historical | Forecast โ†’',
617
+ showarrow=False, font=dict(color='gray', size=11),
618
+ )
619
+ fig_pred.update_layout(
620
+ height=480,
621
+ title=f"{crime_pred[:60]} โ€” {REG_NAMES.get(region_pred, region_pred)}",
622
+ xaxis_title='Year', yaxis_title='Nb of facts',
623
+ hovermode='x unified',
624
+ legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='right', x=1),
625
+ plot_bgcolor='#fafafa',
626
+ )
627
+ st.plotly_chart(fig_pred, use_container_width=True)
628
+
629
+ prev_table = df_prev[
630
+ (df_prev['indicateur'] == crime_pred) &
631
+ (df_prev['region'] == region_pred) &
632
+ (df_prev['source_modele'].isin(modeles_pred)) &
633
+ (df_prev['annee'] >= 2022)
634
+ ].pivot_table(
635
+ index='annee', columns='source_modele', values='yhat', aggfunc='first'
636
+ ).round(0).reset_index()
637
+ prev_table.columns.name = None
638
+ st.dataframe(
639
+ prev_table, hide_index=True, use_container_width=True,
640
+ column_config={'annee': 'Year'}
641
+ )
642
+
643
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
644
+ # SECTION 7 โ€” MODEL PERFORMANCE
645
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
646
+ elif section == "๐Ÿ“‹ Model Performance":
647
+ st.subheader("Model Performance (test on 2020-2021 actuals)", divider=True)
648
+ st.write(
649
+ "Models trained on 2012-2019, tested on 2020-2021. "
650
+ "MAPE = mean absolute percentage error (lower is better)."
651
+ )
652
+
653
+ if len(df_bench) > 0:
654
+ summary = (
655
+ df_bench.groupby('modele')[['RMSE', 'MAE', 'MAPE']]
656
+ .mean().round(2).sort_values('MAPE').reset_index()
657
+ )
658
+ summary.columns = ['Model', 'RMSE', 'MAE', 'MAPE (%)']
659
+
660
+ col_b1, col_b2 = st.columns([1, 2])
661
+ with col_b1:
662
+ st.dataframe(summary, hide_index=True, use_container_width=True)
663
+ with col_b2:
664
+ fig_bench = px.bar(
665
+ summary.sort_values('MAPE (%)', ascending=True),
666
+ x='Model', y='MAPE (%)',
667
+ color='Model',
668
+ color_discrete_map={
669
+ 'Prophet': '#EF553B', 'XGBoost': '#636EFA', 'LightGBM': '#00CC96'
670
+ },
671
+ title='MAPE by model (lower = better)',
672
+ text='MAPE (%)',
673
+ )
674
+ fig_bench.update_traces(texttemplate='%{text:.1f}%', textposition='outside')
675
+ fig_bench.update_layout(showlegend=False, height=320)
676
+ st.plotly_chart(fig_bench, use_container_width=True)
677
+
678
+ if 'indicateur' in df_bench.columns and 'modele' in df_bench.columns:
679
+ st.subheader("MAPE by crime type and model", divider=True)
680
+ pivot_mape = (
681
+ df_bench.groupby(['indicateur', 'modele'])['MAPE']
682
+ .mean().round(1).unstack('modele').fillna(0)
683
+ )
684
+ pivot_mape.index = [x[:40] for x in pivot_mape.index]
685
+ fig_heat_bench = px.imshow(
686
+ pivot_mape, color_continuous_scale='RdYlGn_r',
687
+ labels=dict(color='MAPE (%)'),
688
+ title="MAPE (%) โ€” greener = more accurate",
689
+ aspect='auto', text_auto='.1f',
690
+ )
691
+ fig_heat_bench.update_layout(height=420)
692
+ st.plotly_chart(fig_heat_bench, use_container_width=True)
693
+ else:
694
+ st.info("No benchmark data available.")
695
+
696
+ # โ”€โ”€ Footer โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
697
+ st.divider()
698
+ st.caption(
699
+ "Sources: French Ministry of Interior โ€” "
700
+ "Police Nationale (PN) + Gendarmerie Nationale (GN) | "
701
+ "Historical data: 2012-2021 | Forecasts: Prophet, XGBoost, LightGBM | "
702
+ "Aggregation: department โ†’ region (INSEE 2016 boundaries)"
703
+ )
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ altair
2
+ pandas
3
+ streamlit
4
+ plotly
5
+ requests
6
+ prophet
7
+ xgboost
8
+ lightgbm
9
+ scikit-learn