Skip to content

Commit 5fd5ff4

Browse files
committed
[ML] Update doc link, tick formatter, and baseline api for generic results fields
1 parent 004518b commit 5fd5ff4

File tree

9 files changed

+37
-17
lines changed

9 files changed

+37
-17
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License;
4+
* you may not use this file except in compliance with the Elastic License.
5+
*/
6+
7+
export const DEFAULT_RESULTS_FIELD = 'ml';

x-pack/plugins/ml/public/application/components/data_grid/data_grid.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import { euiDataGridStyle, euiDataGridToolbarSettings } from './common';
3131
import { UseIndexDataReturnType } from './types';
3232
import { DecisionPathPopover } from './feature_importance/decision_path_popover';
3333
import { TopClasses } from '../../../../common/types/feature_importance';
34-
import { DEFAULT_RESULTS_FIELD } from '../../data_frame_analytics/common/constants';
34+
import { DEFAULT_RESULTS_FIELD } from '../../../../common/constants/data_frame_analytics';
3535

3636
// TODO Fix row hovering + bar highlighting
3737
// import { hoveredRow$ } from './column_chart';

x-pack/plugins/ml/public/application/components/data_grid/feature_importance/decision_path_chart.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ export const DecisionPathChart = ({
105105
],
106106
[baseline]
107107
);
108-
const tickFormatter = useCallback((d) => Number(d).toPrecision(NUM_PRECISION), []);
108+
// guarantee up to num_precision significant digits
109+
// without having it in scientific notation
110+
const tickFormatter = useCallback((d) => Number(d.toPrecision(NUM_PRECISION)).toString(), []);
109111

110112
return (
111113
<Chart

x-pack/plugins/ml/public/application/components/data_grid/feature_importance/decision_path_popover.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { DecisionPathJSONViewer } from './decision_path_json_viewer';
1212
import { FeatureImportance, TopClasses } from '../../../../../common/types/feature_importance';
1313
import { ANALYSIS_CONFIG_TYPE } from '../../../data_frame_analytics/common';
1414
import { ClassificationDecisionPath } from './decision_path_classification';
15+
import { useMlKibana } from '../../../contexts/kibana';
1516

1617
interface DecisionPathPopoverProps {
1718
featureImportance: FeatureImportance[];
@@ -40,6 +41,10 @@ export const DecisionPathPopover: FC<DecisionPathPopoverProps> = ({
4041
predictionFieldName,
4142
}) => {
4243
const [selectedTabId, setSelectedTabId] = useState(DECISION_PATH_TABS.CHART);
44+
const {
45+
services: { docLinks },
46+
} = useMlKibana();
47+
const { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } = docLinks;
4348

4449
if (featureImportance.length < 2) {
4550
return <DecisionPathJSONViewer featureImportance={featureImportance} />;
@@ -91,7 +96,7 @@ export const DecisionPathPopover: FC<DecisionPathPopoverProps> = ({
9196
predictionFieldName,
9297
linkedFeatureImportanceValues: (
9398
<EuiLink
94-
href="https://www.elastic.co/guide/en/machine-learning/7.8/ml-feature-importance.html"
99+
href={`${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-feature-importance.html`}
95100
target="_blank"
96101
>
97102
<FormattedMessage

x-pack/plugins/ml/public/application/data_frame_analytics/common/constants.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
* or more contributor license agreements. Licensed under the Elastic License;
44
* you may not use this file except in compliance with the Elastic License.
55
*/
6-
7-
export const DEFAULT_RESULTS_FIELD = 'ml';
86
export const FEATURE_IMPORTANCE = 'feature_importance';
97
export const FEATURE_INFLUENCE = 'feature_influence';
108
export const TOP_CLASSES = 'top_classes';

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_results_table/use_exploration_results.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,8 @@ import {
3030
getPredictionFieldName,
3131
getDefaultPredictionFieldName,
3232
} from '../../../../../../../common/util/analytics_utils';
33-
import {
34-
DEFAULT_RESULTS_FIELD,
35-
FEATURE_IMPORTANCE,
36-
TOP_CLASSES,
37-
} from '../../../../common/constants';
33+
import { FEATURE_IMPORTANCE, TOP_CLASSES } from '../../../../common/constants';
34+
import { DEFAULT_RESULTS_FIELD } from '../../../../../../../common/constants/data_frame_analytics';
3835
import { sortExplorationResultsFields, ML__ID_COPY } from '../../../../common/fields';
3936
import { isRegressionAnalysis } from '../../../../common/analytics';
4037
import { extractErrorMessage } from '../../../../../../../common/util/errors';

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/outlier_exploration/use_outlier_data.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import { SavedSearchQuery } from '../../../../../contexts/ml';
2929
import { getToastNotifications } from '../../../../../util/dependency_cache';
3030

3131
import { getIndexData, getIndexFields, DataFrameAnalyticsConfig } from '../../../../common';
32-
import { DEFAULT_RESULTS_FIELD, FEATURE_INFLUENCE } from '../../../../common/constants';
32+
import { FEATURE_INFLUENCE } from '../../../../common/constants';
33+
import { DEFAULT_RESULTS_FIELD } from '../../../../../../../common/constants/data_frame_analytics';
3334
import { sortExplorationResultsFields, ML__ID_COPY } from '../../../../common/fields';
3435

3536
import { getFeatureCount, getOutlierScoreFieldName } from './common';

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { IIndexPattern } from 'src/plugins/data/common';
1212
import { DeepReadonly } from '../../../../../../../common/types/common';
1313
import { DataFrameAnalyticsConfig, isOutlierAnalysis } from '../../../../common';
1414
import { isClassificationAnalysis, isRegressionAnalysis } from '../../../../common/analytics';
15-
import { DEFAULT_RESULTS_FIELD } from '../../../../common/constants';
15+
import { DEFAULT_RESULTS_FIELD } from '../../../../../../../common/constants/data_frame_analytics';
1616
import { useMlKibana, useNavigateToPath } from '../../../../../contexts/kibana';
1717
import { DEFAULT_NUM_TOP_FEATURE_IMPORTANCE_VALUES } from '../../hooks/use_create_analytics_form';
1818
import { State } from '../../hooks/use_create_analytics_form/state';

x-pack/plugins/ml/server/models/data_frame_analytics/feature_importance.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@
55
*/
66

77
import { IScopedClusterClient } from 'kibana/server';
8-
import { getPredictionFieldName, isRegressionAnalysis } from '../../../common/util/analytics_utils';
9-
8+
import {
9+
getDefaultPredictionFieldName,
10+
getPredictionFieldName,
11+
isRegressionAnalysis,
12+
} from '../../../common/util/analytics_utils';
13+
import { DEFAULT_RESULTS_FIELD } from '../../../common/constants/data_frame_analytics';
1014
// Obtains data for the data frame analytics feature importance functionalities
1115
// such as baseline, decision paths, or importance summary.
1216
export function analyticsFeatureImportanceProvider({
@@ -20,7 +24,13 @@ export function analyticsFeatureImportanceProvider({
2024
const jobConfig = body.data_frame_analytics[0];
2125
if (!isRegressionAnalysis) return undefined;
2226
const destinationIndex = jobConfig.dest.index;
23-
const predictionField = getPredictionFieldName(jobConfig.analysis);
27+
const predictionFieldName = getPredictionFieldName(jobConfig.analysis);
28+
const mlResultsField = jobConfig.dest?.results_field ?? DEFAULT_RESULTS_FIELD;
29+
const predictedField = `${mlResultsField}.${
30+
predictionFieldName ? predictionFieldName : getDefaultPredictionFieldName(jobConfig.analysis)
31+
}`;
32+
const isTrainingField = `${mlResultsField}.is_training`;
33+
2434
const params = {
2535
index: destinationIndex,
2636
size: 0,
@@ -30,7 +40,7 @@ export function analyticsFeatureImportanceProvider({
3040
filter: [
3141
{
3242
term: {
33-
'ml.is_training': true,
43+
[isTrainingField]: true,
3444
},
3545
},
3646
],
@@ -39,7 +49,7 @@ export function analyticsFeatureImportanceProvider({
3949
aggs: {
4050
featureImportanceBaseline: {
4151
avg: {
42-
field: `ml.${predictionField}`,
52+
field: predictedField,
4353
},
4454
},
4555
},

0 commit comments

Comments
 (0)