def field_importance_data(self): """Computes field importance based on the field importance information of the individual models in the ensemble. """ field_importance = {} field_names = {} if self.importance: field_importance = self.importance field_names = {field_id: {'name': self.fields[field_id]["name"]} \ for field_id in field_importance.keys()} return [list(importance) for importance in \ sorted(field_importance.items(), key=lambda x: x[1], reverse=True)], field_names if (self.distributions is not None and isinstance(self.distributions, list) and all('importance' in item for item in self.distributions)): # Extracts importance from ensemble information importances = [ model_info['importance'] for model_info in self.distributions ] for index in range(0, len(importances)): model_info = importances[index] for field_info in model_info: field_id = field_info[0] if field_id not in field_importance: field_importance[field_id] = 0.0 name = self.fields[field_id]['name'] field_names[field_id] = {'name': name} field_importance[field_id] += field_info[1] else: # Old ensembles, extracts importance from model information for model_id in self.model_ids: local_model = BaseModel(model_id, api=self.api) for field_info in local_model.field_importance: field_id = field_info[0] if field_info[0] not in field_importance: field_importance[field_id] = 0.0 name = self.fields[field_id]['name'] field_names[field_id] = {'name': name} field_importance[field_id] += field_info[1] number_of_models = len(self.model_ids) for field_id in field_importance: field_importance[field_id] /= number_of_models return [list(importance) for importance in \ sorted(field_importance.items(), key=lambda x: x[1], reverse=True)], field_names