import%20marimo%0A%0A__generated_with%20%3D%20%220.9.27%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20Large%20problem%20with%201000%20assets%20and%20100%20factors%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20import%20cvxpy%20as%20cvx%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20from%20util.random%20import%20random_assets%2C%20random_beta%2C%20random_factors%2C%20random_noise%0A%0A%20%20%20%20from%20cvx.portfolio.min_risk%20import%20minrisk_problem%0A%20%20%20%20from%20cvx.risk.factor%20import%20FactorModel%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20FactorModel%2C%0A%20%20%20%20%20%20%20%20cvx%2C%0A%20%20%20%20%20%20%20%20minrisk_problem%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20pd%2C%0A%20%20%20%20%20%20%20%20random_assets%2C%0A%20%20%20%20%20%20%20%20random_beta%2C%0A%20%20%20%20%20%20%20%20random_factors%2C%0A%20%20%20%20%20%20%20%20random_noise%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20__(random_factors)%3A%0A%20%20%20%20T%20%3D%202000%0A%20%20%20%20factors%20%3D%20random_factors(T%3DT%2C%20N%3D100%2C%20const_factor%3DFalse)%0A%20%20%20%20return%20T%2C%20factors%0A%0A%0A%40app.cell%0Adef%20__(factors%2C%20random_assets%2C%20random_beta)%3A%0A%20%20%20%20beta%20%3D%20random_beta(assets%3Drandom_assets(1000)%2C%20factors%3Dfactors)%0A%20%20%20%20return%20(beta%2C)%0A%0A%0A%40app.cell%0Adef%20__(beta%2C%20factors%2C%20random_noise)%3A%0A%20%20%20%20ret%20%3D%20factors%20%40%20beta%20%2B%200.01%20*%20random_noise(factors%20%40%20beta)%0A%20%20%20%20return%20(ret%2C)%0A%0A%0A%40app.cell%0Adef%20__(FactorModel%2C%20ret)%3A%0A%20%20%20%20triangle%20%3D%20FactorModel(assets%3Dlen(ret.columns)%2C%20k%3D100)%0A%20%20%20%20return%20(triangle%2C)%0A%0A%0A%40app.cell%0Adef%20__(beta%2C%20cvx%2C%20factors%2C%20minrisk_problem%2C%20np%2C%20pd%2C%20ret%2C%20triangle)%3A%0A%20%20%20%20w%20%3D%20cvx.Variable(1000)%0A%20%20%20%20y%20%3D%20cvx.Variable(100)%0A%20%20%20%20_problem%20%3D%20minrisk_problem(triangle%2C%20w%2C%20y%3Dy)%0A%20%20%20%20triangle.update(%0A%20%20%20%20%20%20%20%20exposure%3Dbeta.values%2C%0A%20%20%20%20%20%20%20%20cov%3Dfactors.cov().values%2C%0A%20%20%20%20%20%20%20%20idiosyncratic_risk%3Dpd.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20data%3Dret%20-%20factors%20%40%20beta%2C%20index%3Dret.index%2C%20columns%3Dret.columns%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.std()%0A%20%20%20%20%20%20%20%20.values%2C%0A%20%20%20%20%20%20%20%20lower_assets%3Dnp.zeros(1000)%2C%0A%20%20%20%20%20%20%20%20upper_assets%3Dnp.ones(1000)%2C%0A%20%20%20%20%20%20%20%20lower_factors%3D-0.1%20*%20np.ones(100)%2C%0A%20%20%20%20%20%20%20%20upper_factors%3D0.1%20*%20np.ones(100)%2C%0A%20%20%20%20)%0A%20%20%20%20return%20w%2C%20y%0A%0A%0A%40app.cell%0Adef%20__(beta%2C%20factors%2C%20minrisk_problem%2C%20np%2C%20pd%2C%20ret%2C%20triangle%2C%20w%2C%20y)%3A%0A%20%20%20%20for%20i%20in%20range(1)%3A%0A%20%20%20%20%20%20%20%20_problem%20%3D%20minrisk_problem(triangle%2C%20w%2C%20y%3Dy)%0A%20%20%20%20%20%20%20%20triangle.update(%0A%20%20%20%20%20%20%20%20%20%20%20%20exposure%3Dbeta.values%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cov%3Dfactors.cov().values%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20idiosyncratic_risk%3Dpd.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20data%3Dret%20-%20factors%20%40%20beta%2C%20index%3Dret.index%2C%20columns%3Dret.columns%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20.std()%0A%20%20%20%20%20%20%20%20%20%20%20%20.values%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20lower_assets%3Dnp.zeros(1000)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20upper_assets%3Dnp.ones(1000)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20lower_factors%3D-0.1%20*%20np.ones(100)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20upper_factors%3D0.1%20*%20np.ones(100)%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20_problem.solve(ignore_dpp%3DTrue)%0A%20%20%20%20return%20(i%2C)%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
d2423e6f067fae6a9e38cb13e115e97caf862cb7a77d6ef516d6a1e0f8ce3393