guillermo-navas-palencia / optbinning

Optimal binning: monotonic binning with constraints. Support batch & stream optimal binning. Scorecard modelling and counterfactual explanations.
http://gnpalencia.org/optbinning/
Apache License 2.0
435 stars 98 forks source link

Possible bug in OptimalBinning2D #249

Closed detrin closed 1 year ago

detrin commented 1 year ago

Hi, I am not sure if this is an actual bug or just a result of changes in pandas or numpy library. This line is troublesome since the numpy array has dtype of object it can not be used as index here.

I will try to come up with minimal example

optbinning==0.17.3
numpy==1.23.5
pandas==1.5.3
detrin commented 1 year ago

And ofc changing it to selected_rows = np.array(rows, dtype=int)[self._solution] solves the issue on my side. I could open PR.

detrin commented 1 year ago

Here we go, I am still not sure if this is just a typo or there is a reason for object to be used. I wonder then why is stopped working now.

from optbinning import OptimalBinning2D

df_json = """[
  { "x": 67341.0, "y": null, "z": 0 },
  { "x": 82682.0, "y": null, "z": 0 },
  { "x": 72384.66667, "y": null, "z": 0 },
  { "x": 36062.5, "y": null, "z": 0 },
  { "x": 58369.5, "y": null, "z": 0 },
  { "x": 82883.0, "y": null, "z": 0 },
  { "x": 66930.83333, "y": null, "z": 0 },
  { "x": 21670.0, "y": null, "z": 0 },
  { "x": 32741.0, "y": null, "z": 0 },
  { "x": 70038.33333, "y": null, "z": 0 },
  { "x": 36941.33333, "y": null, "z": 0 },
  { "x": 27669.0, "y": null, "z": 0 },
  { "x": 35214.0, "y": null, "z": 0 },
  { "x": 24824.16667, "y": null, "z": 0 },
  { "x": 95776.0, "y": null, "z": 0 },
  { "x": 33515.0, "y": null, "z": 0 },
  { "x": 70002.5, "y": null, "z": 0 },
  { "x": 33260.33333, "y": null, "z": 0 },
  { "x": 83795.5, "y": null, "z": 0 },
  { "x": 72750.0, "y": null, "z": 0 },
  { "x": 16175.0, "y": null, "z": 0 },
  { "x": 33251.0, "y": null, "z": 0 },
  { "x": 24047.83333, "y": "CB", "z": 0 },
  { "x": 39868.0, "y": null, "z": 0 },
  { "x": 28888.0, "y": null, "z": 0 },
  { "x": 20728.0, "y": null, "z": 0 },
  { "x": 90554.33333, "y": null, "z": 0 },
  { "x": 33701.0, "y": null, "z": 0 },
  { "x": 41297.66667, "y": null, "z": 0 },
  { "x": 72069.0, "y": null, "z": 0 },
  { "x": 29641.0, "y": null, "z": 0 },
  { "x": 35715.16667, "y": null, "z": 0 },
  { "x": 28910.16667, "y": null, "z": 0 },
  { "x": 28876.16667, "y": null, "z": 0 },
  { "x": 40824.66667, "y": null, "z": 0 },
  { "x": 29795.0, "y": null, "z": 0 },
  { "x": 10391.33333, "y": null, "z": 0 },
  { "x": 21487.66667, "y": null, "z": 0 },
  { "x": 69738.0, "y": null, "z": 0 },
  { "x": 80472.16667, "y": null, "z": 0 },
  { "x": 38982.0, "y": null, "z": 0 },
  { "x": 29302.33333, "y": null, "z": 0 },
  { "x": 71103.16667, "y": null, "z": 0 },
  { "x": 74400.0, "y": null, "z": 0 },
  { "x": 58599.5, "y": null, "z": 0 },
  { "x": 81448.0, "y": null, "z": 0 },
  { "x": 62860.0, "y": null, "z": 0 },
  { "x": 218272.0, "y": null, "z": 0 },
  { "x": 27747.33333, "y": null, "z": 0 },
  { "x": 28514.66667, "y": null, "z": 0 },
  { "x": 43893.0, "y": null, "z": 0 },
  { "x": 72614.0, "y": null, "z": 0 },
  { "x": 63050.33333, "y": null, "z": 0 },
  { "x": 33851.0, "y": null, "z": 0 },
  { "x": 71363.0, "y": null, "z": 0 },
  { "x": 15539.83333, "y": null, "z": 0 },
  { "x": 32378.0, "y": null, "z": 0 },
  { "x": 12108.5, "y": null, "z": 0 },
  { "x": 57448.0, "y": null, "z": 0 },
  { "x": 79734.33333, "y": null, "z": 0 },
  { "x": 2860.66667, "y": null, "z": 0 },
  { "x": 48834.0, "y": null, "z": 0 },
  { "x": 70250.5, "y": null, "z": 0 },
  { "x": 119824.0, "y": null, "z": 0 },
  { "x": 57728.0, "y": null, "z": 0 },
  { "x": 32291.5, "y": null, "z": 0 },
  { "x": 31059.0, "y": null, "z": 0 },
  { "x": 73577.0, "y": null, "z": 0 },
  { "x": 70259.33333, "y": null, "z": 0 },
  { "x": 11374.5, "y": null, "z": 0 },
  { "x": 16254.0, "y": null, "z": 0 },
  { "x": 6860.66667, "y": null, "z": 0 },
  { "x": 20139.5, "y": null, "z": 1 },
  { "x": 80995.16667, "y": null, "z": 0 },
  { "x": 45806.0, "y": null, "z": 0 },
  { "x": 76235.0, "y": null, "z": 0 },
  { "x": 35322.33333, "y": null, "z": 0 },
  { "x": 38078.0, "y": null, "z": 0 },
  { "x": 58101.66667, "y": null, "z": 0 },
  { "x": 16718.66667, "y": null, "z": 0 },
  { "x": 54686.0, "y": null, "z": 0 },
  { "x": 71458.66667, "y": null, "z": 0 },
  { "x": 18055.0, "y": null, "z": 0 },
  { "x": 47840.66667, "y": null, "z": 0 },
  { "x": 9147.66667, "y": null, "z": 0 },
  { "x": 19659.16667, "y": null, "z": 0 },
  { "x": 89983.0, "y": null, "z": 0 },
  { "x": 113395.0, "y": null, "z": 0 },
  { "x": 71229.83333, "y": null, "z": 0 },
  { "x": 44797.16667, "y": null, "z": 0 },
  { "x": 34139.83333, "y": null, "z": 0 },
  { "x": 67150.0, "y": null, "z": 0 },
  { "x": 24740.0, "y": null, "z": 0 },
  { "x": 88300.33333, "y": "CB", "z": 0 },
  { "x": 31795.66667, "y": null, "z": 0 },
  { "x": 39006.0, "y": null, "z": 0 },
  { "x": 44424.33333, "y": null, "z": 0 },
  { "x": null, "y": "CACHE", "z": 0 },
  { "x": 26715.0, "y": null, "z": 0 },
  { "x": 27973.0, "y": null, "z": 0 },
  { "x": 70653.66667, "y": null, "z": 0 },
  { "x": 52995.83333, "y": null, "z": 0 },
  { "x": 30843.0, "y": null, "z": 0 },
  { "x": 6981.0, "y": null, "z": 0 },
  { "x": 20310.0, "y": null, "z": 0 },
  { "x": 32602.5, "y": null, "z": 0 },
  { "x": 73855.83333, "y": null, "z": 0 },
  { "x": 27849.66667, "y": null, "z": 0 },
  { "x": 29106.5, "y": null, "z": 0 },
  { "x": 29309.83333, "y": null, "z": 0 },
  { "x": 5998.0, "y": null, "z": 0 },
  { "x": 12050.0, "y": null, "z": 0 },
  { "x": 71874.16667, "y": null, "z": 0 },
  { "x": 36111.0, "y": null, "z": 0 },
  { "x": 31644.0, "y": null, "z": 0 },
  { "x": 5476.5, "y": null, "z": 0 },
  { "x": 71792.33333, "y": null, "z": 0 },
  { "x": 13415.83333, "y": null, "z": 0 },
  { "x": 79152.0, "y": null, "z": 0 },
  { "x": 54854.0, "y": null, "z": 0 },
  { "x": 30441.16667, "y": null, "z": 0 },
  { "x": 33700.0, "y": null, "z": 0 },
  { "x": 29816.0, "y": null, "z": 0 },
  { "x": 29876.66667, "y": null, "z": 0 },
  { "x": 34062.0, "y": null, "z": 0 },
  { "x": 30211.0, "y": null, "z": 0 },
  { "x": 24987.0, "y": null, "z": 0 },
  { "x": 160827.0, "y": null, "z": 0 },
  { "x": 25728.0, "y": null, "z": 0 },
  { "x": 21695.0, "y": null, "z": 0 },
  { "x": 36195.0, "y": null, "z": 0 },
  { "x": 35386.0, "y": null, "z": 0 },
  { "x": 51779.0, "y": null, "z": 0 },
  { "x": 84672.0, "y": null, "z": 0 },
  { "x": 42294.0, "y": null, "z": 0 },
  { "x": 31549.16667, "y": null, "z": 0 },
  { "x": 55044.33333, "y": null, "z": 0 },
  { "x": 20185.83333, "y": null, "z": 0 },
  { "x": 32016.0, "y": null, "z": 0 },
  { "x": 29622.33333, "y": null, "z": 0 },
  { "x": 29304.83333, "y": null, "z": 0 },
  { "x": 33327.0, "y": null, "z": 0 },
  { "x": 69565.33333, "y": null, "z": 0 },
  { "x": 32017.0, "y": null, "z": 0 },
  { "x": 21192.33333, "y": null, "z": 0 },
  { "x": 64602.0, "y": null, "z": 0 },
  { "x": 74621.66667, "y": null, "z": 0 },
  { "x": 60880.0, "y": null, "z": 0 },
  { "x": 11615.0, "y": null, "z": 0 },
  { "x": 10714.83333, "y": null, "z": 0 },
  { "x": 24574.16667, "y": null, "z": 0 },
  { "x": 28447.83333, "y": null, "z": 0 },
  { "x": 29503.0, "y": null, "z": 0 },
  { "x": 14082.5, "y": null, "z": 0 },
  { "x": 37229.0, "y": null, "z": 0 },
  { "x": 30090.0, "y": "CB", "z": 0 },
  { "x": 19801.5, "y": null, "z": 0 },
  { "x": 24617.83333, "y": "CB", "z": 0 },
  { "x": 49557.33333, "y": null, "z": 0 },
  { "x": 29855.66667, "y": null, "z": 0 },
  { "x": 51470.0, "y": null, "z": 0 },
  { "x": 19841.5, "y": null, "z": 0 },
  { "x": 87800.0, "y": null, "z": 0 },
  { "x": 35206.0, "y": null, "z": 0 },
  { "x": 57021.0, "y": null, "z": 0 },
  { "x": 35960.0, "y": null, "z": 0 },
  { "x": 22445.83333, "y": null, "z": 0 },
  { "x": 42884.16667, "y": null, "z": 0 },
  { "x": 26050.0, "y": null, "z": 0 },
  { "x": 58156.0, "y": null, "z": 0 },
  { "x": 34264.5, "y": null, "z": 0 },
  { "x": 33928.83333, "y": null, "z": 0 },
  { "x": 60504.66667, "y": null, "z": 0 },
  { "x": 35365.0, "y": null, "z": 0 },
  { "x": 5015.0, "y": null, "z": 0 },
  { "x": 54701.33333, "y": null, "z": 0 },
  { "x": 42052.0, "y": null, "z": 0 },
  { "x": 17826.5, "y": null, "z": 0 },
  { "x": 39459.16667, "y": null, "z": 0 },
  { "x": 79481.33333, "y": null, "z": 0 },
  { "x": 54263.33333, "y": null, "z": 0 },
  { "x": 92422.83333, "y": null, "z": 0 },
  { "x": 34154.0, "y": null, "z": 0 },
  { "x": 54150.0, "y": null, "z": 0 },
  { "x": 18637.0, "y": null, "z": 0 },
  { "x": 61728.5, "y": null, "z": 0 },
  { "x": 27384.16667, "y": null, "z": 0 },
  { "x": 54650.0, "y": null, "z": 0 },
  { "x": 66362.33333, "y": null, "z": 0 },
  { "x": 29881.5, "y": null, "z": 0 },
  { "x": 26642.16667, "y": null, "z": 0 },
  { "x": 32859.0, "y": null, "z": 0 },
  { "x": 82226.0, "y": null, "z": 0 },
  { "x": 56984.16667, "y": null, "z": 0 },
  { "x": 13681.0, "y": null, "z": 0 },
  { "x": 65312.33333, "y": null, "z": 0 },
  { "x": 35658.0, "y": null, "z": 0 },
  { "x": 34275.0, "y": null, "z": 0 },
  { "x": 14680.33333, "y": null, "z": 0 },
  { "x": 35355.0, "y": null, "z": 0 },
  { "x": 32453.5, "y": null, "z": 0 },
  { "x": 31937.0, "y": null, "z": 0 },
  { "x": 10232.5, "y": null, "z": 0 },
  { "x": 52410.0, "y": null, "z": 0 },
  { "x": 20467.0, "y": null, "z": 0 },
  { "x": 0.0, "y": "CB", "z": 0 },
  { "x": 34927.5, "y": null, "z": 0 },
  { "x": 80548.0, "y": null, "z": 0 },
  { "x": 33096.66667, "y": null, "z": 0 },
  { "x": 23022.0, "y": null, "z": 0 },
  { "x": 11715.33333, "y": null, "z": 0 },
  { "x": 74037.0, "y": null, "z": 0 },
  { "x": 81464.0, "y": null, "z": 0 },
  { "x": 11359.5, "y": null, "z": 0 },
  { "x": 55247.83333, "y": null, "z": 0 },
  { "x": 11293.0, "y": null, "z": 0 },
  { "x": 78200.83333, "y": null, "z": 0 },
  { "x": 84978.33333, "y": null, "z": 0 },
  { "x": 22030.0, "y": null, "z": 0 },
  { "x": 96780.0, "y": "CB", "z": 0 },
  { "x": 28109.33333, "y": "CB", "z": 0 },
  { "x": 18993.33333, "y": null, "z": 0 },
  { "x": 16610.0, "y": null, "z": 0 },
  { "x": 28439.0, "y": null, "z": 0 },
  { "x": 44717.0, "y": null, "z": 0 },
  { "x": 54875.0, "y": null, "z": 0 },
  { "x": 24731.16667, "y": null, "z": 0 },
  { "x": 35025.0, "y": null, "z": 0 },
  { "x": 32739.0, "y": null, "z": 0 },
  { "x": 72533.0, "y": "CB", "z": 0 },
  { "x": 77059.0, "y": null, "z": 0 },
  { "x": 32249.0, "y": null, "z": 0 },
  { "x": 91303.0, "y": null, "z": 0 },
  { "x": 25035.83333, "y": null, "z": 0 },
  { "x": 30124.0, "y": null, "z": 0 },
  { "x": 25877.5, "y": null, "z": 0 },
  { "x": 37966.0, "y": null, "z": 0 },
  { "x": 68023.5, "y": null, "z": 0 },
  { "x": 53132.0, "y": null, "z": 0 },
  { "x": 74251.0, "y": null, "z": 0 },
  { "x": 21052.83333, "y": null, "z": 0 },
  { "x": 26017.83333, "y": null, "z": 0 },
  { "x": 34663.0, "y": null, "z": 0 },
  { "x": 11033.0, "y": null, "z": 0 },
  { "x": 17593.66667, "y": null, "z": 0 },
  { "x": 32032.0, "y": null, "z": 0 },
  { "x": 21668.0, "y": null, "z": 0 },
  { "x": 21666.0, "y": null, "z": 0 },
  { "x": 11911.66667, "y": null, "z": 0 },
  { "x": 24975.0, "y": null, "z": 0 },
  { "x": 36740.66667, "y": null, "z": 0 },
  { "x": 34143.83333, "y": null, "z": 0 },
  { "x": 31745.0, "y": null, "z": 0 },
  { "x": 28306.0, "y": null, "z": 0 },
  { "x": 8389.0, "y": null, "z": 0 },
  { "x": 34246.0, "y": null, "z": 0 },
  { "x": 31775.0, "y": null, "z": 0 },
  { "x": 23043.83333, "y": null, "z": 0 },
  { "x": 20391.83333, "y": null, "z": 0 },
  { "x": 62020.0, "y": null, "z": 0 },
  { "x": 56435.0, "y": null, "z": 0 },
  { "x": 16103.0, "y": null, "z": 0 },
  { "x": 36117.0, "y": "CB", "z": 0 },
  { "x": 28494.0, "y": null, "z": 0 },
  { "x": 76371.0, "y": null, "z": 0 },
  { "x": 17754.0, "y": null, "z": 0 },
  { "x": 94966.66667, "y": null, "z": 0 },
  { "x": 89089.66667, "y": null, "z": 0 },
  { "x": 26339.5, "y": null, "z": 0 },
  { "x": 52618.66667, "y": null, "z": 0 },
  { "x": 30886.0, "y": null, "z": 0 },
  { "x": 24071.66667, "y": null, "z": 0 },
  { "x": 35723.16667, "y": "CB", "z": 0 },
  { "x": 28517.16667, "y": null, "z": 0 },
  { "x": 72209.0, "y": null, "z": 0 },
  { "x": 11635.0, "y": "CB", "z": 1 },
  { "x": 30869.33333, "y": null, "z": 0 },
  { "x": 77809.0, "y": null, "z": 0 },
  { "x": 38989.0, "y": null, "z": 0 },
  { "x": 35320.33333, "y": null, "z": 0 },
  { "x": 10932.66667, "y": null, "z": 0 },
  { "x": 50313.33333, "y": null, "z": 0 },
  { "x": 31642.33333, "y": null, "z": 0 },
  { "x": 30270.16667, "y": null, "z": 0 },
  { "x": 35321.33333, "y": null, "z": 0 },
  { "x": 30124.0, "y": "CB", "z": 0 },
  { "x": 68892.0, "y": null, "z": 0 },
  { "x": 71559.33333, "y": null, "z": 0 },
  { "x": 60962.0, "y": null, "z": 0 },
  { "x": 16336.16667, "y": null, "z": 0 },
  { "x": 25487.5, "y": null, "z": 0 },
  { "x": 78792.66667, "y": null, "z": 0 },
  { "x": 87494.0, "y": null, "z": 0 },
  { "x": 29793.0, "y": null, "z": 0 },
  { "x": 17125.33333, "y": null, "z": 0 },
  { "x": 17266.33333, "y": null, "z": 0 },
  { "x": 59759.66667, "y": null, "z": 0 },
  { "x": 48050.0, "y": null, "z": 0 },
  { "x": 29890.0, "y": null, "z": 0 },
  { "x": 79578.5, "y": null, "z": 0 },
  { "x": 29493.0, "y": null, "z": 0 },
  { "x": 24420.33333, "y": null, "z": 0 },
  { "x": 33909.0, "y": null, "z": 0 },
  { "x": 22945.83333, "y": null, "z": 0 },
  { "x": 45785.0, "y": null, "z": 0 },
  { "x": 31415.0, "y": null, "z": 0 },
  { "x": 43572.5, "y": null, "z": 0 },
  { "x": 50895.0, "y": null, "z": 0 },
  { "x": 25476.66667, "y": null, "z": 0 },
  { "x": 43446.83333, "y": null, "z": 0 },
  { "x": 51178.0, "y": null, "z": 0 },
  { "x": 18752.16667, "y": null, "z": 0 },
  { "x": 15146.0, "y": null, "z": 0 },
  { "x": 75299.0, "y": null, "z": 0 },
  { "x": 32434.16667, "y": null, "z": 0 },
  { "x": 34346.5, "y": null, "z": 0 },
  { "x": 23445.0, "y": null, "z": 0 },
  { "x": 30692.0, "y": null, "z": 0 },
  { "x": 52101.0, "y": null, "z": 0 },
  { "x": 72912.0, "y": null, "z": 0 },
  { "x": 92599.0, "y": null, "z": 0 },
  { "x": 32807.0, "y": null, "z": 0 },
  { "x": 20606.0, "y": null, "z": 0 },
  { "x": 27262.33333, "y": null, "z": 0 },
  { "x": 29007.0, "y": null, "z": 0 },
  { "x": 24128.33333, "y": null, "z": 0 },
  { "x": 33919.0, "y": null, "z": 0 },
  { "x": 36145.0, "y": null, "z": 0 },
  { "x": 74766.0, "y": null, "z": 0 },
  { "x": 14294.0, "y": null, "z": 0 },
  { "x": 53083.0, "y": null, "z": 0 },
  { "x": 22191.66667, "y": null, "z": 0 },
  { "x": 23320.0, "y": null, "z": 0 },
  { "x": 62042.5, "y": null, "z": 0 },
  { "x": 81460.0, "y": null, "z": 0 },
  { "x": 32738.0, "y": null, "z": 0 },
  { "x": 70788.0, "y": null, "z": 0 },
  { "x": 30357.33333, "y": null, "z": 0 },
  { "x": 75111.33333, "y": null, "z": 0 },
  { "x": 86249.0, "y": null, "z": 0 },
  { "x": 61830.0, "y": null, "z": 0 },
  { "x": 33182.5, "y": null, "z": 1 },
  { "x": 46911.33333, "y": null, "z": 0 },
  { "x": 22889.33333, "y": null, "z": 0 },
  { "x": 25126.0, "y": null, "z": 0 },
  { "x": 15025.0, "y": null, "z": 0 },
  { "x": 14944.16667, "y": null, "z": 0 },
  { "x": 59044.0, "y": null, "z": 0 },
  { "x": 21428.66667, "y": null, "z": 0 },
  { "x": 32432.16667, "y": null, "z": 0 },
  { "x": 86943.0, "y": null, "z": 0 },
  { "x": 34608.0, "y": null, "z": 0 },
  { "x": 23954.16667, "y": null, "z": 0 },
  { "x": 35657.0, "y": null, "z": 0 },
  { "x": 22269.0, "y": null, "z": 0 },
  { "x": 27453.66667, "y": null, "z": 0 },
  { "x": 22017.33333, "y": null, "z": 0 },
  { "x": 35633.0, "y": null, "z": 0 },
  { "x": 63651.16667, "y": null, "z": 0 },
  { "x": 64886.33333, "y": null, "z": 0 },
  { "x": 27684.0, "y": null, "z": 0 },
  { "x": 78025.0, "y": null, "z": 0 },
  { "x": 30445.16667, "y": null, "z": 0 },
  { "x": 45727.0, "y": null, "z": 0 },
  { "x": 48446.0, "y": null, "z": 0 },
  { "x": 62172.0, "y": null, "z": 0 },
  { "x": 33551.0, "y": null, "z": 0 },
  { "x": 26632.0, "y": null, "z": 0 },
  { "x": 33495.0, "y": null, "z": 0 },
  { "x": 12858.16667, "y": null, "z": 0 },
  { "x": 14718.66667, "y": null, "z": 0 },
  { "x": 70922.0, "y": null, "z": 0 },
  { "x": 61749.0, "y": null, "z": 1 },
  { "x": 43995.83333, "y": null, "z": 0 },
  { "x": 25248.33333, "y": null, "z": 0 },
  { "x": 95537.0, "y": null, "z": 0 },
  { "x": 39079.0, "y": null, "z": 0 },
  { "x": 17572.66667, "y": null, "z": 0 },
  { "x": 13601.0, "y": null, "z": 0 },
  { "x": 20463.0, "y": null, "z": 0 },
  { "x": 31614.16667, "y": null, "z": 0 },
  { "x": 83517.33333, "y": null, "z": 0 },
  { "x": 121909.0, "y": null, "z": 0 },
  { "x": 20720.66667, "y": null, "z": 0 },
  { "x": 32149.0, "y": null, "z": 0 },
  { "x": 34532.66667, "y": null, "z": 1 },
  { "x": 67110.0, "y": null, "z": 0 },
  { "x": 22120.33333, "y": null, "z": 0 },
  { "x": 31862.5, "y": null, "z": 0 },
  { "x": 122907.0, "y": null, "z": 0 },
  { "x": 64503.16667, "y": null, "z": 0 },
  { "x": 26482.0, "y": null, "z": 0 },
  { "x": 83106.0, "y": null, "z": 0 },
  { "x": 3810.0, "y": null, "z": 0 },
  { "x": 34312.0, "y": null, "z": 0 },
  { "x": 27381.66667, "y": null, "z": 0 },
  { "x": 76156.33333, "y": null, "z": 0 },
  { "x": 66218.5, "y": null, "z": 0 },
  { "x": 23106.66667, "y": null, "z": 0 },
  { "x": 71080.83333, "y": null, "z": 0 },
  { "x": 27444.0, "y": null, "z": 0 },
  { "x": 50344.0, "y": null, "z": 0 },
  { "x": 35627.0, "y": null, "z": 0 },
  { "x": 33908.0, "y": null, "z": 0 },
  { "x": 75806.66667, "y": null, "z": 0 },
  { "x": 35717.16667, "y": null, "z": 1 },
  { "x": 37144.0, "y": null, "z": 0 },
  { "x": 37074.16667, "y": null, "z": 0 },
  { "x": 57929.0, "y": null, "z": 0 },
  { "x": 6867.5, "y": null, "z": 0 },
  { "x": 28585.83333, "y": null, "z": 0 },
  { "x": 70248.5, "y": null, "z": 0 },
  { "x": 34153.0, "y": null, "z": 0 },
  { "x": 29719.0, "y": null, "z": 0 },
  { "x": 16805.0, "y": null, "z": 0 },
  { "x": 14202.5, "y": null, "z": 0 },
  { "x": 50333.0, "y": null, "z": 0 },
  { "x": 33112.66667, "y": null, "z": 0 },
  { "x": 22223.33333, "y": null, "z": 0 },
  { "x": 75136.5, "y": null, "z": 0 },
  { "x": 60154.0, "y": null, "z": 0 },
  { "x": 65134.16667, "y": null, "z": 0 },
  { "x": 31441.66667, "y": null, "z": 0 },
  { "x": 35056.0, "y": null, "z": 0 },
  { "x": 29304.0, "y": null, "z": 0 },
  { "x": 30542.0, "y": null, "z": 0 },
  { "x": 22708.0, "y": null, "z": 1 },
  { "x": 27084.0, "y": null, "z": 0 },
  { "x": 22718.83333, "y": null, "z": 0 },
  { "x": 34103.66667, "y": null, "z": 0 },
  { "x": 35867.0, "y": null, "z": 0 },
  { "x": 28736.0, "y": null, "z": 0 },
  { "x": 6160.66667, "y": null, "z": 0 },
  { "x": 10718.83333, "y": null, "z": 0 },
  { "x": 28647.0, "y": null, "z": 0 },
  { "x": 31414.33333, "y": null, "z": 0 },
  { "x": 27535.0, "y": null, "z": 0 },
  { "x": 11626.66667, "y": null, "z": 0 },
  { "x": 63988.33333, "y": null, "z": 0 },
  { "x": 14595.0, "y": null, "z": 0 },
  { "x": 72794.0, "y": null, "z": 0 },
  { "x": 21443.33333, "y": null, "z": 0 },
  { "x": 55835.33333, "y": null, "z": 0 },
  { "x": 8265.0, "y": null, "z": 0 },
  { "x": 43635.5, "y": null, "z": 0 },
  { "x": 33676.0, "y": null, "z": 0 },
  { "x": 23109.0, "y": null, "z": 0 },
  { "x": 47220.0, "y": null, "z": 0 },
  { "x": 29906.0, "y": null, "z": 0 },
  { "x": 34541.66667, "y": null, "z": 0 },
  { "x": 84981.16667, "y": null, "z": 0 },
  { "x": 17458.0, "y": null, "z": 0 },
  { "x": 26785.66667, "y": null, "z": 0 },
  { "x": 99739.0, "y": null, "z": 0 },
  { "x": 16883.0, "y": null, "z": 0 },
  { "x": 9027.0, "y": null, "z": 0 },
  { "x": 30094.16667, "y": null, "z": 0 },
  { "x": 21816.0, "y": null, "z": 0 },
  { "x": 30156.0, "y": null, "z": 0 },
  { "x": 82911.0, "y": null, "z": 0 },
  { "x": 28590.0, "y": "CB", "z": 0 },
  { "x": 33099.0, "y": null, "z": 0 },
  { "x": 52057.0, "y": null, "z": 0 },
  { "x": 82461.83333, "y": null, "z": 0 },
  { "x": 65100.0, "y": "CB", "z": 0 },
  { "x": 72370.0, "y": null, "z": 0 },
  { "x": 34603.0, "y": null, "z": 0 },
  { "x": 32546.33333, "y": null, "z": 0 },
  { "x": 64324.66667, "y": null, "z": 0 },
  { "x": 31776.0, "y": null, "z": 0 },
  { "x": 68523.0, "y": null, "z": 0 },
  { "x": 2165.0, "y": null, "z": 0 },
  { "x": 81288.5, "y": null, "z": 0 },
  { "x": 27243.5, "y": null, "z": 0 },
  { "x": 44830.0, "y": null, "z": 0 },
  { "x": 35505.0, "y": null, "z": 0 },
  { "x": 121599.0, "y": null, "z": 0 },
  { "x": 34187.66667, "y": null, "z": 0 },
  { "x": 34143.66667, "y": null, "z": 0 },
  { "x": 37416.0, "y": null, "z": 0 },
  { "x": 91186.0, "y": null, "z": 0 },
  { "x": 32197.0, "y": null, "z": 0 },
  { "x": 78821.66667, "y": null, "z": 0 },
  { "x": 40791.0, "y": null, "z": 0 },
  { "x": 35705.83333, "y": null, "z": 0 },
  { "x": 9214.66667, "y": null, "z": 0 },
  { "x": 30302.5, "y": null, "z": 0 },
  { "x": 16100.0, "y": null, "z": 0 },
  { "x": 35988.0, "y": null, "z": 0 },
  { "x": 64269.0, "y": null, "z": 0 },
  { "x": 34389.33333, "y": null, "z": 0 },
  { "x": 20463.66667, "y": "CB", "z": 0 },
  { "x": 72967.0, "y": null, "z": 0 },
  { "x": 20313.0, "y": null, "z": 0 },
  { "x": 30659.0, "y": null, "z": 0 },
  { "x": 97164.0, "y": null, "z": 0 },
  { "x": 30090.0, "y": null, "z": 0 },
  { "x": 73900.33333, "y": null, "z": 0 },
  { "x": 65366.66667, "y": "CB", "z": 0 },
  { "x": 8525.66667, "y": null, "z": 0 },
  { "x": 65366.66667, "y": null, "z": 0 },
  { "x": 28668.5, "y": null, "z": 0 },
  { "x": 34535.66667, "y": null, "z": 0 },
  { "x": 44356.5, "y": null, "z": 0 },
  { "x": 36214.66667, "y": null, "z": 0 },
  { "x": 74087.0, "y": null, "z": 0 },
  { "x": 29356.66667, "y": null, "z": 0 },
  { "x": 49721.0, "y": null, "z": 0 },
  { "x": 10311.0, "y": null, "z": 0 },
  { "x": 64995.0, "y": null, "z": 0 },
  { "x": 56436.66667, "y": "CB", "z": 0 },
  { "x": 62930.0, "y": null, "z": 0 },
  { "x": 57790.0, "y": null, "z": 0 },
  { "x": 31470.83333, "y": null, "z": 0 },
  { "x": 25276.0, "y": null, "z": 0 },
  { "x": 30647.16667, "y": null, "z": 0 },
  { "x": 69078.0, "y": null, "z": 0 },
  { "x": 900.16667, "y": null, "z": 0 },
  { "x": 60907.0, "y": null, "z": 0 },
  { "x": 20015.66667, "y": null, "z": 0 },
  { "x": 23678.16667, "y": null, "z": 0 },
  { "x": 73151.0, "y": null, "z": 0 },
  { "x": 34664.0, "y": null, "z": 0 },
  { "x": 50786.66667, "y": null, "z": 0 },
  { "x": 71025.0, "y": null, "z": 0 },
  { "x": 20436.66667, "y": null, "z": 0 },
  { "x": 59187.5, "y": "CB", "z": 0 },
  { "x": 29849.0, "y": null, "z": 0 },
  { "x": 31671.0, "y": null, "z": 0 },
  { "x": 178163.0, "y": null, "z": 0 },
  { "x": 29730.0, "y": null, "z": 0 },
  { "x": 70885.0, "y": null, "z": 0 },
  { "x": 31595.0, "y": null, "z": 0 },
  { "x": 54073.0, "y": null, "z": 0 },
  { "x": 30706.5, "y": null, "z": 0 },
  { "x": 61471.0, "y": null, "z": 0 },
  { "x": 78769.0, "y": null, "z": 0 },
  { "x": 20391.16667, "y": null, "z": 0 },
  { "x": 28121.66667, "y": null, "z": 0 },
  { "x": 17929.16667, "y": null, "z": 0 },
  { "x": 68372.0, "y": null, "z": 0 },
  { "x": 69842.0, "y": null, "z": 0 },
  { "x": 35531.0, "y": null, "z": 0 },
  { "x": 35511.66667, "y": null, "z": 0 },
  { "x": 91598.66667, "y": null, "z": 0 },
  { "x": 51542.66667, "y": null, "z": 0 },
  { "x": 23126.0, "y": null, "z": 0 },
  { "x": 17592.5, "y": null, "z": 0 },
  { "x": 42751.0, "y": null, "z": 0 },
  { "x": 47968.0, "y": null, "z": 0 },
  { "x": 28911.0, "y": null, "z": 0 },
  { "x": 42116.0, "y": null, "z": 0 },
  { "x": 30213.0, "y": null, "z": 0 },
  { "x": 29300.66667, "y": null, "z": 0 },
  { "x": 23190.0, "y": null, "z": 0 },
  { "x": 28663.33333, "y": null, "z": 0 },
  { "x": 79520.0, "y": null, "z": 0 },
  { "x": 36109.5, "y": null, "z": 0 },
  { "x": 67298.16667, "y": null, "z": 0 },
  { "x": 12663.0, "y": null, "z": 0 },
  { "x": 96686.16667, "y": null, "z": 0 },
  { "x": 53059.0, "y": null, "z": 0 },
  { "x": 11153.66667, "y": null, "z": 0 },
  { "x": 72000.16667, "y": null, "z": 0 },
  { "x": 74253.0, "y": null, "z": 0 },
  { "x": 29942.0, "y": null, "z": 0 },
  { "x": 60308.0, "y": null, "z": 0 },
  { "x": 166110.66667, "y": null, "z": 0 },
  { "x": 58991.0, "y": null, "z": 0 },
  { "x": 27066.66667, "y": null, "z": 0 },
  { "x": 85976.0, "y": null, "z": 0 },
  { "x": 10105.16667, "y": null, "z": 0 },
  { "x": 73300.0, "y": null, "z": 0 },
  { "x": 27629.0, "y": null, "z": 0 },
  { "x": 30842.0, "y": null, "z": 0 },
  { "x": 29761.83333, "y": null, "z": 0 },
  { "x": 52098.0, "y": null, "z": 0 },
  { "x": 25729.0, "y": null, "z": 0 },
  { "x": 37150.33333, "y": null, "z": 0 },
  { "x": 16551.0, "y": null, "z": 0 },
  { "x": 31845.83333, "y": null, "z": 0 },
  { "x": 75686.0, "y": null, "z": 0 },
  { "x": 69213.33333, "y": null, "z": 0 },
  { "x": 29276.33333, "y": null, "z": 0 },
  { "x": 80936.66667, "y": null, "z": 0 },
  { "x": 33383.33333, "y": null, "z": 0 },
  { "x": 45637.0, "y": "CB", "z": 0 },
  { "x": 67322.0, "y": null, "z": 0 },
  { "x": 11152.66667, "y": null, "z": 0 },
  { "x": 33631.16667, "y": null, "z": 0 },
  { "x": 102960.5, "y": null, "z": 0 },
  { "x": 110698.0, "y": null, "z": 0 },
  { "x": 71738.0, "y": null, "z": 0 },
  { "x": 53006.66667, "y": null, "z": 0 },
  { "x": 3766.0, "y": null, "z": 0 },
  { "x": 33763.0, "y": null, "z": 0 },
  { "x": 27544.66667, "y": null, "z": 0 },
  { "x": 26600.0, "y": "CB", "z": 0 },
  { "x": 128794.83333, "y": "CB", "z": 0 },
  { "x": 37350.5, "y": null, "z": 0 },
  { "x": 34438.0, "y": null, "z": 0 },
  { "x": 34529.83333, "y": null, "z": 0 },
  { "x": 29407.66667, "y": null, "z": 0 },
  { "x": 29790.0, "y": null, "z": 0 },
  { "x": 31294.0, "y": "CB", "z": 0 },
  { "x": 40827.0, "y": null, "z": 0 },
  { "x": 58408.5, "y": null, "z": 0 },
  { "x": 67098.33333, "y": null, "z": 0 },
  { "x": 33064.5, "y": null, "z": 0 },
  { "x": 8382.5, "y": null, "z": 0 },
  { "x": 2410.83333, "y": null, "z": 0 },
  { "x": 67841.33333, "y": null, "z": 0 },
  { "x": 118519.66667, "y": null, "z": 0 },
  { "x": 28491.66667, "y": null, "z": 0 },
  { "x": 45658.0, "y": null, "z": 0 },
  { "x": 22267.0, "y": null, "z": 0 },
  { "x": 34929.5, "y": null, "z": 1 },
  { "x": 34926.5, "y": null, "z": 0 },
  { "x": 28886.0, "y": null, "z": 0 },
  { "x": 82346.16667, "y": null, "z": 0 },
  { "x": 36108.0, "y": null, "z": 0 },
  { "x": 66727.0, "y": null, "z": 0 },
  { "x": 16790.5, "y": null, "z": 0 },
  { "x": 92489.0, "y": null, "z": 0 },
  { "x": 76538.0, "y": null, "z": 0 },
  { "x": 31898.0, "y": null, "z": 0 },
  { "x": 76785.0, "y": null, "z": 0 },
  { "x": 77428.0, "y": null, "z": 0 },
  { "x": 42044.66667, "y": null, "z": 0 },
  { "x": 28710.83333, "y": null, "z": 0 },
  { "x": 25427.0, "y": null, "z": 0 },
  { "x": 81829.0, "y": null, "z": 0 },
  { "x": 37560.0, "y": null, "z": 0 },
  { "x": 68494.83333, "y": null, "z": 0 },
  { "x": 31180.66667, "y": null, "z": 0 },
  { "x": 21520.0, "y": null, "z": 0 },
  { "x": 16873.83333, "y": null, "z": 0 },
  { "x": 24265.0, "y": null, "z": 0 },
  { "x": 23230.0, "y": null, "z": 0 },
  { "x": 36331.0, "y": null, "z": 0 },
  { "x": 22318.33333, "y": null, "z": 0 },
  { "x": 34184.0, "y": null, "z": 0 },
  { "x": 71286.16667, "y": null, "z": 0 },
  { "x": 71600.0, "y": null, "z": 0 },
  { "x": 22574.33333, "y": null, "z": 0 },
  { "x": 9523.66667, "y": null, "z": 0 },
  { "x": 80690.0, "y": null, "z": 0 },
  { "x": 66412.0, "y": null, "z": 0 },
  { "x": 71090.0, "y": null, "z": 0 },
  { "x": 27650.5, "y": null, "z": 0 },
  { "x": 68515.0, "y": null, "z": 0 },
  { "x": 74127.0, "y": null, "z": 0 },
  { "x": 12054.0, "y": null, "z": 0 },
  { "x": 30953.0, "y": null, "z": 0 },
  { "x": 32497.0, "y": null, "z": 0 },
  { "x": 54561.16667, "y": null, "z": 0 },
  { "x": 65853.66667, "y": null, "z": 0 },
  { "x": 21849.0, "y": null, "z": 0 },
  { "x": 35921.33333, "y": null, "z": 0 },
  { "x": 33620.0, "y": null, "z": 0 },
  { "x": 15164.66667, "y": null, "z": 0 },
  { "x": 7190.33333, "y": null, "z": 0 },
  { "x": 72056.0, "y": null, "z": 0 },
  { "x": 33647.5, "y": null, "z": 0 },
  { "x": 46187.0, "y": null, "z": 0 },
  { "x": 35716.16667, "y": null, "z": 0 },
  { "x": 31028.66667, "y": null, "z": 0 },
  { "x": 35416.5, "y": null, "z": 0 },
  { "x": 45625.0, "y": null, "z": 0 },
  { "x": 26204.0, "y": null, "z": 0 },
  { "x": 25784.0, "y": "CB", "z": 0 },
  { "x": 28518.83333, "y": null, "z": 0 },
  { "x": 33456.83333, "y": null, "z": 0 },
  { "x": 19367.0, "y": null, "z": 0 },
  { "x": 265931.0, "y": null, "z": 0 },
  { "x": 74218.33333, "y": null, "z": 0 },
  { "x": 15415.66667, "y": null, "z": 0 },
  { "x": 70567.5, "y": null, "z": 0 },
  { "x": 67497.0, "y": null, "z": 0 },
  { "x": 6018.0, "y": null, "z": 0 },
  { "x": 19111.0, "y": null, "z": 0 },
  { "x": 62955.83333, "y": null, "z": 0 },
  { "x": 76786.0, "y": "CB", "z": 0 },
  { "x": 18565.33333, "y": null, "z": 0 },
  { "x": 31200.33333, "y": null, "z": 0 },
  { "x": 2868.66667, "y": null, "z": 0 },
  { "x": 4473.5, "y": null, "z": 0 },
  { "x": 21965.83333, "y": null, "z": 0 },
  { "x": 63349.66667, "y": null, "z": 0 },
  { "x": 63843.0, "y": null, "z": 0 },
  { "x": 35164.66667, "y": null, "z": 0 },
  { "x": 27281.66667, "y": null, "z": 0 },
  { "x": 21035.16667, "y": null, "z": 0 },
  { "x": 21967.0, "y": null, "z": 0 },
  { "x": 25555.0, "y": null, "z": 0 },
  { "x": 5720.0, "y": null, "z": 0 },
  { "x": 34929.5, "y": null, "z": 0 },
  { "x": 35311.5, "y": null, "z": 0 },
  { "x": 29388.33333, "y": null, "z": 0 },
  { "x": 84053.33333, "y": null, "z": 0 },
  { "x": 23921.0, "y": null, "z": 0 },
  { "x": 15952.0, "y": null, "z": 0 },
  { "x": 4213.0, "y": null, "z": 0 },
  { "x": 54521.33333, "y": null, "z": 0 },
  { "x": 26782.0, "y": null, "z": 0 },
  { "x": 71744.5, "y": null, "z": 0 },
  { "x": 21198.33333, "y": null, "z": 0 },
  { "x": 30708.5, "y": null, "z": 0 },
  { "x": 26782.0, "y": "CB", "z": 0 },
  { "x": 84185.0, "y": null, "z": 0 },
  { "x": 9780.0, "y": null, "z": 0 },
  { "x": 34253.0, "y": null, "z": 0 },
  { "x": 90816.0, "y": null, "z": 0 },
  { "x": 41340.0, "y": null, "z": 0 },
  { "x": 72599.33333, "y": null, "z": 0 },
  { "x": 45438.0, "y": "CB", "z": 0 },
  { "x": 32950.33333, "y": null, "z": 0 },
  { "x": 42125.83333, "y": null, "z": 0 },
  { "x": 53992.33333, "y": null, "z": 0 },
  { "x": 59693.0, "y": null, "z": 0 },
  { "x": 79669.66667, "y": null, "z": 0 },
  { "x": 28586.0, "y": null, "z": 0 },
  { "x": 65581.0, "y": null, "z": 0 },
  { "x": 34882.33333, "y": null, "z": 0 },
  { "x": 34140.83333, "y": null, "z": 0 },
  { "x": 34784.0, "y": null, "z": 0 },
  { "x": 39258.0, "y": null, "z": 0 },
  { "x": 31195.0, "y": null, "z": 0 },
  { "x": 27197.66667, "y": null, "z": 0 },
  { "x": 30933.0, "y": null, "z": 0 },
  { "x": 71053.33333, "y": null, "z": 0 },
  { "x": 35359.0, "y": null, "z": 0 },
  { "x": 35173.66667, "y": null, "z": 0 },
  { "x": 24890.0, "y": null, "z": 0 },
  { "x": 70126.83333, "y": null, "z": 0 },
  { "x": 66839.5, "y": null, "z": 0 },
  { "x": 26851.0, "y": null, "z": 0 },
  { "x": 50952.0, "y": null, "z": 0 },
  { "x": 29990.0, "y": null, "z": 0 },
  { "x": 12360.66667, "y": null, "z": 0 },
  { "x": 7573.0, "y": null, "z": 0 },
  { "x": 11474.33333, "y": null, "z": 0 },
  { "x": 80102.0, "y": null, "z": 0 },
  { "x": 22458.5, "y": null, "z": 0 },
  { "x": 15467.33333, "y": null, "z": 0 },
  { "x": 23065.66667, "y": null, "z": 0 },
  { "x": 56549.5, "y": null, "z": 0 },
  { "x": 5239.5, "y": null, "z": 0 },
  { "x": 21980.16667, "y": null, "z": 0 },
  { "x": 38922.0, "y": null, "z": 0 },
  { "x": 3914.33333, "y": null, "z": 1 },
  { "x": 68895.0, "y": null, "z": 0 },
  { "x": 75296.0, "y": null, "z": 0 },
  { "x": 11354.0, "y": null, "z": 0 },
  { "x": 33550.0, "y": null, "z": 0 },
  { "x": 50914.0, "y": null, "z": 0 },
  { "x": 24073.0, "y": null, "z": 0 },
  { "x": 20612.0, "y": null, "z": 0 },
  { "x": 73899.33333, "y": null, "z": 0 },
  { "x": 49459.0, "y": null, "z": 0 },
  { "x": 95566.33333, "y": null, "z": 0 },
  { "x": 21584.33333, "y": null, "z": 0 },
  { "x": 70439.0, "y": null, "z": 0 },
  { "x": 75650.5, "y": null, "z": 0 },
  { "x": 34827.0, "y": null, "z": 0 },
  { "x": 67237.0, "y": null, "z": 0 },
  { "x": 77809.0, "y": "CB", "z": 0 },
  { "x": 88583.0, "y": null, "z": 0 },
  { "x": 34465.5, "y": null, "z": 0 },
  { "x": 34931.5, "y": null, "z": 0 },
  { "x": 61809.16667, "y": null, "z": 0 },
  { "x": 13735.33333, "y": null, "z": 0 },
  { "x": 29688.0, "y": null, "z": 0 },
  { "x": 165298.0, "y": null, "z": 0 },
  { "x": 18616.0, "y": null, "z": 0 },
  { "x": 4087.33333, "y": null, "z": 0 },
  { "x": 35958.0, "y": null, "z": 0 },
  { "x": 35717.16667, "y": null, "z": 0 },
  { "x": 65146.83333, "y": null, "z": 0 },
  { "x": 22422.0, "y": null, "z": 0 },
  { "x": 4714.16667, "y": null, "z": 0 },
  { "x": 38440.0, "y": null, "z": 0 },
  { "x": 57659.0, "y": null, "z": 0 },
  { "x": 33292.0, "y": null, "z": 0 },
  { "x": 36113.0, "y": "CB", "z": 0 },
  { "x": 71362.0, "y": null, "z": 0 },
  { "x": 83464.83333, "y": null, "z": 0 },
  { "x": 30367.0, "y": null, "z": 0 },
  { "x": 70408.0, "y": null, "z": 0 },
  { "x": 23321.0, "y": null, "z": 0 },
  { "x": 20598.66667, "y": null, "z": 0 },
  { "x": 20764.0, "y": null, "z": 0 },
  { "x": 15647.0, "y": null, "z": 0 },
  { "x": 9575.0, "y": null, "z": 0 },
  { "x": 53519.33333, "y": null, "z": 0 },
  { "x": 51514.0, "y": null, "z": 0 },
  { "x": 18020.0, "y": null, "z": 0 },
  { "x": 42520.5, "y": null, "z": 0 },
  { "x": 8756.66667, "y": null, "z": 0 },
  { "x": 37765.0, "y": null, "z": 0 },
  { "x": 33710.33333, "y": null, "z": 0 },
  { "x": 12370.5, "y": null, "z": 0 },
  { "x": 11434.5, "y": "CB", "z": 0 },
  { "x": 25300.0, "y": null, "z": 0 },
  { "x": 24139.66667, "y": null, "z": 0 },
  { "x": 87578.0, "y": null, "z": 0 },
  { "x": 26928.0, "y": null, "z": 0 },
  { "x": 70791.66667, "y": null, "z": 0 },
  { "x": 34645.0, "y": null, "z": 0 },
  { "x": 34262.0, "y": null, "z": 0 },
  { "x": 14163.5, "y": null, "z": 0 },
  { "x": 35325.33333, "y": null, "z": 0 },
  { "x": 39703.66667, "y": null, "z": 0 },
  { "x": 25577.0, "y": null, "z": 0 },
  { "x": null, "y": "CB", "z": 1 }
]"""

df = pd.read_json(df_json, orient="records")
df["x"] = df["x"].astype(float)
df["y"] = df["y"].astype("category")
df["z"] = df["z"].astype(float)

optb = OptimalBinning2D(
    name_x="x",
    name_y="y",
    dtype_x="numerical",
    dtype_y="categorical",
    solver="mip",
    max_n_prebins_x=50,
    max_n_prebins_y=50,
)

x = df["x"].values
y = df["y"].values
z = df["z"].values
optb.fit(x, y, z)

gives me in python3.9.17

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[100], line 23
     21 y = df['y'].values
     22 z = df['z'].values
---> 23 optb.fit(x, y, z)

File [~/Documents/projects/<deez nuts>/data_processing/env/lib/python3.9/site-packages/optbinning/binning/multidimensional/binning_2d.py:456](https://file+.vscode-resource.vscode-cdn.net/Users/danielherman/Documents/projects/<deez nuts>/data_processing/~/Documents/projects/<deez nuts>/data_processing/env/lib/python3.9/site-packages/optbinning/binning/multidimensional/binning_2d.py:456), in OptimalBinning2D.fit(self, x, y, z, check_input)
    434 def fit(self, x, y, z, check_input=False):
    435     """Fit the optimal binning 2D according to the given training data.
    436 
    437     Parameters
   (...)
    454         Fitted optimal binning 2D.
    455     """
--> 456     return self._fit(x, y, z, check_input)

File [~/Documents/projects/<deez nuts>/data_processing/env/lib/python3.9/site-packages/optbinning/binning/multidimensional/binning_2d.py:715](https://file+.vscode-resource.vscode-cdn.net/Users/danielherman/Documents/projects/<deez nuts>/data_processing/~/Documents/projects/<deez nuts>/data_processing/env/lib/python3.9/site-packages/optbinning/binning/multidimensional/binning_2d.py:715), in OptimalBinning2D._fit(self, x, y, z, check_input)
    713 _event_rate = _n_event [/](https://file+.vscode-resource.vscode-cdn.net/) (_n_event + _n_nonevent)
    714 print(r, type(r), type(r[0]), r.dtype)
--> 715 P[r] = i
    716 D[r] = _event_rate
    717 opt_n_nonevent[i] = _n_nonevent

IndexError: arrays used as indices must be of integer (or boolean) type
detrin commented 1 year ago

@guillermo-navas-palencia Could you please comment on this bug?

guillermo-navas-palencia commented 1 year ago

Hi @detrin. First, I hope you understand that maintaining optbinning is not my full-time job, some I kindly ask you to be patient, especially since you opened this issue two days ago.

The error is simple, dtype category is equivalent to integer, just change df['y'] = df['y'].astype('str'). The categorical variable must have object dtype.

detrin commented 1 year ago

Thanks for the answer, I appreciate that.