diff --git a/modules/deeplearning/quantile_regression.py b/modules/deeplearning/quantile_regression.py
index a3bfaba6bd01f95dc311d9b49f0e71032e20f8d6..cb038e960458ad87f1958acc8d2fd94d1a5314b3 100644
--- a/modules/deeplearning/quantile_regression.py
+++ b/modules/deeplearning/quantile_regression.py
@@ -38,8 +38,7 @@ def make_data(num_points=1000):
     return X_train, X_test, Y_train, Y_test, X, Y
 
 
-# Function to create a quantile regression model
-def build_quantile_model(q):
+def build_model(loss=tf.keras.losses.MeanSquaredError()):
     model = tf.keras.models.Sequential([
         tf.keras.layers.InputLayer(shape=(1,)),
         tf.keras.layers.Dense(64, activation='relu'),
@@ -47,42 +46,9 @@ def build_quantile_model(q):
         tf.keras.layers.Dense(64, activation='relu'),
         tf.keras.layers.Dense(1)  # Output layer
     ])
-    model.compile(optimizer='adam', loss=quantile_loss(q))
+    model.compile(optimizer='adam', loss=loss)
     return model
 
-def build_bulk_quantile_model():
-    model = tf.keras.models.Sequential([
-        tf.keras.layers.InputLayer(shape=(1,)),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(1)  # Output layer
-    ])
-    model.compile(optimizer='adam', loss=bulk_quantile_loss())
-    return model
-
-def build_mae_model():
-    model = tf.keras.models.Sequential([
-        tf.keras.layers.InputLayer(shape=(1,)),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(1)  # Output layer
-    ])
-    # model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError())
-    model.compile(optimizer='adam', loss=tf.keras.losses.MeanAbsoluteError())
-    return model
-
-def build_mse_model():
-    model = tf.keras.models.Sequential([
-        tf.keras.layers.InputLayer(shape=(1,)),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(64, activation='relu'),
-        tf.keras.layers.Dense(1)  # Output layer
-    ])
-    model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError())
-    return model
 
 def run(num_points=1000, num_plot_pts=200):
     # Define quantiles
@@ -95,24 +61,24 @@ def run(num_points=1000, num_plot_pts=200):
     # Train a model for each quantile
     for q in quantiles:
         print(f"Training quantile {q} model...")
-        models[q] = build_quantile_model(q)
+        models[q] = build_model(loss=quantile_loss(q))
         models[q].fit(X_train, Y_train, epochs=100, batch_size=32, verbose=0)
 
     # Generate test data predictions
     X_range = np.linspace(X.min(), X.max(), num_plot_pts).reshape(-1, 1)
     predictions = {q: models[q].predict(X_range) for q in quantiles}
 
-    model = build_mae_model()
+    model = build_model(loss=tf.keras.losses.MeanAbsoluteError())
     print(f"Training MAE model...")
     model.fit(X_train, Y_train, epochs=100, batch_size=32, verbose=0)
     mae_predictions = model.predict(X_range)
 
-    model = build_mse_model()
+    model = build_model()
     print(f"Training MSE model...")
     model.fit(X_train, Y_train, epochs=100, batch_size=32, verbose=0)
     mse_predictions = model.predict(X_range)
 
-    model = build_bulk_quantile_model()
+    model = build_model(loss=bulk_quantile_loss())
     print(f"Training bulk quantile model...")
     model.fit(X_train, Y_train, epochs=100, batch_size=32, verbose=0)
     bulk_predictions = model.predict(X_range)