code: def corrgroups60(display=False):
      
  
      # set a constant seed
      old_seed = np.random.seed()
      np.random.seed(0)
  
      # generate dataset with known correlation
      N = 1000
      M = 60
  
      # set one coefficent from each group of 3 to 1
      beta = np.zeros(M)
      beta[0:30:3] = 1
  
      # build a correlation matrix with groups of 3 tightly correlated features
      C = np.eye(M)
      for i in range(0,30,3):
          C[i,i+1] = C[i+1,i] = 0.99
          C[i,i+2] = C[i+2,i] = 0.99
          C[i+1,i+2] = C[i+2,i+1] = 0.99
      f = lambda X: np.matmul(X, beta)
  
      # Make sure the sample correlation is a perfect match
      X_start = np.random.randn(N, M)
      X_centered = X_start - X_start.mean(0)
      Sigma = np.matmul(X_centered.T, X_centered) / X_centered.shape[0]
      W = np.linalg.cholesky(np.linalg.inv(Sigma)).T
      X_white = np.matmul(X_centered, W.T)
      assert np.linalg.norm(np.corrcoef(np.matmul(X_centered, W.T).T) - np.eye(M)) < 1e-6 # ensure this decorrelates the data
  
      # create the final data
      X_final = np.matmul(X_white, np.linalg.cholesky(C).T)
      X = X_final
      y = f(X) + np.random.randn(N) * 1e-2
  
      # restore the previous numpy random seed
      np.random.seed(old_seed)
  
      return pd.DataFrame(X), y
docs: Correlated Groups 60
      
      A simulated dataset with tight correlations among distinct groups of features.