Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/interactions #83

Open
wants to merge 21 commits into
base: release/1.0.5
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 24 additions & 7 deletions python-lib/backend/fetch_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import time
from dataiku.customwebapp import get_webapp_config
from chart_formatters.lift_chart import LiftChartFormatter
from glm_handler.dku_model_metrics import ModelMetricsCalculator
from .api_utils import calculate_base_levels

visual_ml_trainer = model_cache = model_deployer =relativities_calculator = None
Expand Down Expand Up @@ -381,12 +380,12 @@ def get_model_comparison_data():

@fetch_api.route("/get_model_metrics", methods=["POST"])
def get_model_metrics():
current_app.logger.info("Getting Model Metrics")
if is_local:
return jsonify(dummy_model_metrics)

loading_thread.join()
request_json = request.get_json()
current_app.logger.info(f"Getting Model Metrics with request: {request_json}")


models = [request_json["model1"], request_json["model2"]]
Expand All @@ -397,9 +396,9 @@ def get_model_metrics():

for i, model in enumerate(models, start=1):
model_retriever = VisualMLModelRetriver(model)
mmc = ModelMetricsCalculator(model_retriever)
model_aic, model_bic, model_deviance = mmc.calculate_metrics()

model_aic = model_retriever.predictor._clf.aic_value
model_bic = model_retriever.predictor._clf.bic_value
model_deviance = model_retriever.predictor._clf.deviance_value
model_key = f"Model_{i}"

metrics["models"][model_key] = {
Expand Down Expand Up @@ -448,12 +447,30 @@ def export_model():
for i in range(max_len):
for variable in variables:
if i < len(variable_keys[variable]):
value = variable_keys[variable][i]
value = sorted(variable_keys[variable])[i]
csv_output += "{},{},,".format(value, relativities_dict[variable][value])
else:
csv_output += ",,,"
csv_output += "\n"


variable_stats = model_cache.get_model(model).get('variable_stats')
relativities_interaction = model_cache.get_model(model).get('relativities_interaction')

if len(relativities_interaction) > 0:
unique_interactions = relativities_interaction.groupby(['feature_1', 'feature_2']).count().reset_index()
for _, interaction in unique_interactions.iterrows():
feature_1 = interaction['feature_1']
feature_2 = interaction['feature_2']
these_relativities = relativities_interaction[(relativities_interaction['feature_1']==feature_1) & (relativities_interaction['feature_2']==feature_2)]
csv_output += "{} * {}\n\n".format(feature_1, feature_2)
csv_output += ",,{}\n".format(feature_1)
sorted_value_1 = sorted(list(set(these_relativities['value_1'])))
csv_output += ",,{}\n{}".format(",".join([str(v) for v in sorted_value_1]), feature_2)
sorted_value_2 = sorted(list(set(these_relativities['value_2'])))
for value_2 in sorted_value_2:
csv_output += ",{},{}\n".format(str(value_2), ",".join([str(these_relativities[(these_relativities['value_1']==value_1) & (these_relativities['value_2']==value_2)]['relativity'].iloc[0]/relativities_dict[feature_1][value_1]/relativities_dict[feature_2][value_2]) for value_1 in sorted_value_1]))
csv_output += "\n"

csv_data = csv_output.encode('utf-8')

except KeyError as e:
Expand Down
4 changes: 3 additions & 1 deletion python-lib/backend/local_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ def setup_dataiku_client():
}
}
interaction_setup_params = {
"target_column": "ClaimAmount",
"target_column": "ClaimAmount",
"interactions": [{ "first": 'VehBrand', "second": 'VehPower' },
{ "first": 'Area', "second": 'DrivAge' }],
"exposure_column":"Exposure",
"distribution_function":"Tweedie",
"link_function":"Logit",
Expand Down
6 changes: 5 additions & 1 deletion python-lib/backend/model_cache.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from glm_handler.dku_relativites_calculator import RelativitiesCalculator
from glm_handler.dku_model_deployer import ModelDeployer
from glm_handler.glm_data_handler import GlmDataHandler
from glm_handler.dku_model_metrics import ModelMetricsCalculator
from time import time
from logging_assist.logging import logger
from glm_handler.glm_data_handler import GlmDataHandler
Expand Down Expand Up @@ -45,6 +44,7 @@ def setup_model_cache(global_dku_mltask, model_deployer):
base_values = relativities_calculator.get_base_values()

relativities = relativities_calculator.get_relativities_df()
relativities_interaction = relativities_calculator.get_relativities_interactions_df()

logger.info(f"relativites are: {relativities.to_dict()}")
relativities_dict = relativities_calculator.relativities
Expand Down Expand Up @@ -72,6 +72,7 @@ def setup_model_cache(global_dku_mltask, model_deployer):
# Store data in cache
model_cache.add_model(model_id,
relativities,
relativities_interaction,
model1_predicted_base,
base_values,
relativities_dict,
Expand Down Expand Up @@ -109,6 +110,8 @@ def update_model_cache(global_dku_mltask, model_cache):
base_values = relativities_calculator.get_base_values()

relativities = relativities_calculator.get_relativities_df()
relativities_interaction = relativities_calculator.get_relativities_interactions_df()

relativities_dict = relativities_calculator.relativities
variable_level_stats = VariableLevelStatsFormatter(
model_retriever, data_handler, relativities_calculator
Expand All @@ -132,6 +135,7 @@ def update_model_cache(global_dku_mltask, model_cache):

model_cache.add_model(model_id,
relativities,
relativities_interaction,
model1_predicted_base,
base_values,
relativities_dict,
Expand Down
Loading