Model evaluation and metrics in Apache Spark - Time & Space Complexity
When we check how well a model works, we use evaluation metrics. Understanding how long it takes to calculate these metrics helps us handle bigger data smoothly.
We want to know: How does the time to evaluate a model grow as the data size grows?
Analyze the time complexity of the following code snippet.
from pyspark.ml.evaluation import BinaryClassificationEvaluator
# Assume predictions is a Spark DataFrame with columns 'label' and 'rawPrediction'
evaluator = BinaryClassificationEvaluator(labelCol='label', rawPredictionCol='rawPrediction')
# Calculate area under ROC
auc = evaluator.evaluate(predictions)
print(f"Area Under ROC: {auc}")
This code calculates the Area Under the ROC curve to evaluate a binary classification model's predictions.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Scanning through all prediction rows to compare predicted scores and true labels.
- How many times: Once over all data points (rows) in the predictions DataFrame.
As the number of predictions grows, the time to calculate the metric grows roughly in direct proportion.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks |
| 100 | About 100 checks |
| 1000 | About 1000 checks |
Pattern observation: Doubling the data roughly doubles the work needed to evaluate the model.
Time Complexity: O(n)
This means the evaluation time grows linearly with the number of predictions we check.
[X] Wrong: "Calculating evaluation metrics is instant and does not depend on data size."
[OK] Correct: Even though metrics seem simple, they must look at every prediction, so more data means more work and more time.
Knowing how evaluation time grows helps you explain your model testing choices clearly and shows you understand practical data challenges.
"What if we used a metric that requires comparing every pair of predictions? How would the time complexity change?"
Practice
Solution
Step 1: Understand classification metrics
Classification models predict categories, so accuracy measures correct predictions over total predictions.Step 2: Match metric to model type
Accuracy is the standard metric for classification, while RMSE, MAE, and R-squared are for regression.Final Answer:
Accuracy -> Option CQuick Check:
Classification accuracy = Accuracy [OK]
- Confusing regression metrics with classification
- Using R-squared for classification
- Choosing MAE for classification
Solution
Step 1: Recall evaluator syntax
BinaryClassificationEvaluator uses parameter metricName to specify the metric.Step 2: Check metric value
"areaUnderROC" is a valid metricName; accuracy is not valid for this evaluator.Final Answer:
BinaryClassificationEvaluator(metricName="areaUnderROC") -> Option BQuick Check:
Use metricName="areaUnderROC" in BinaryClassificationEvaluator [OK]
- Using 'metric' instead of 'metricName'
- Passing invalid metric names like 'accuracy'
- Using single quotes inconsistently
from pyspark.ml.evaluation import RegressionEvaluator predictions = spark.createDataFrame([ (3.0, 2.5), (5.0, 5.0), (2.5, 3.0), (7.0, 8.0) ], ["label", "prediction"]) evaluator = RegressionEvaluator(metricName="rmse") rmse = evaluator.evaluate(predictions) print(round(rmse, 2))
Solution
Step 1: Calculate squared errors
Errors: (3.0-2.5)^2=0.25, (5.0-5.0)^2=0, (2.5-3.0)^2=0.25, (7.0-8.0)^2=1.0Step 2: Compute RMSE
Mean squared error = (0.25+0+0.25+1.0)/4 = 0.375; RMSE = sqrt(0.375) ≈ 0.612Final Answer:
0.61 -> Option DQuick Check:
RMSE ≈ 0.61 [OK]
- Calculating mean absolute error instead of RMSE
- Forgetting to take square root
- Rounding errors
from pyspark.ml.evaluation import RegressionEvaluator evaluator = RegressionEvaluator(metricName="accuracy")What is the cause of the error?
Solution
Step 1: Check valid metrics for RegressionEvaluator
RegressionEvaluator supports metrics like rmse, mse, mae, r2 but not accuracy.Step 2: Identify error cause
Using "accuracy" causes an error because it is for classification, not regression.Final Answer:
"accuracy" is not a valid metric for RegressionEvaluator -> Option AQuick Check:
RegressionEvaluator metrics exclude accuracy [OK]
- Confusing metric names between evaluators
- Assuming metricName typo causes error
- Ignoring evaluator import errors
Solution
Step 1: Identify evaluators for each metric
areaUnderROC is supported by BinaryClassificationEvaluator; F1 score is supported by MulticlassClassificationEvaluator.Step 2: Combine evaluators correctly
Use BinaryClassificationEvaluator for areaUnderROC and MulticlassClassificationEvaluator for F1 on the same predictions DataFrame.Final Answer:
Use BinaryClassificationEvaluator with metricName="areaUnderROC" and MulticlassClassificationEvaluator with metricName="f1" -> Option AQuick Check:
BinaryClassificationEvaluator + MulticlassClassificationEvaluator = correct combo [OK]
- Using RegressionEvaluator for classification metrics
- Using BinaryClassificationEvaluator for F1 score
- Using MulticlassClassificationEvaluator for areaUnderROC
Ready to prove it?
Pass the test and this pattern moves unknown
