Whiz Tools

Z-Score Calculator

Introduction

z-score (ಅಥವಾ ಪ್ರಮಾಣಿತ ಅಂಕ) ಎಂಬುದು ಸಂಖ್ಯಾತ್ಮಕ ಅಳೆಯುವಿಕೆ, ಇದು ಒಂದು ಮೌಲ್ಯದ ಗುಂಪಿನ ಅರ್ಥದೊಂದಿಗೆ ಸಂಬಂಧವನ್ನು ವಿವರಿಸುತ್ತದೆ. ಇದು ಒಂದು ಅಂಶವು ಅರ್ಥದಿಂದ ಎಷ್ಟು ಪ್ರಮಾಣಿತ ಅಂಕಗಳ ಅಂತರದಲ್ಲಿದೆ ಎಂಬುದನ್ನು ಸೂಚಿಸುತ್ತದೆ. z-score ಸಂಖ್ಯಾಶಾಸ್ತ್ರದಲ್ಲಿ ಒಂದು ಪ್ರಮುಖ ಸಾಧನವಾಗಿದೆ, ಇದು ವಿಭಿನ್ನ ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ಪ್ರಮಾಣೀಕರಿಸಲು ಮತ್ತು ಹೊರಗೊಮ್ಮಲುಗಳನ್ನು ಗುರುತಿಸಲು ಅನುಮತಿಸುತ್ತದೆ.

Formula

z-score ಅನ್ನು ಈ ಕೆಳಗಿನ ಸೂತ್ರವನ್ನು ಬಳಸಿಕೊಂಡು ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ:

z=xμσz = \frac{x - \mu}{\sigma}

ಇಲ್ಲಿ:

  • zz = z-score
  • xx = ವೈಯಕ್ತಿಕ ಡೇಟಾ ಅಂಕ
  • μ\mu = ಡೇಟಾಸೆಟ್‌ನ ಅರ್ಥ
  • σ\sigma = ಡೇಟಾಸೆಟ್‌ನ ಪ್ರಮಾಣಿತ ಅಂಕ

ಈ ಸೂತ್ರವು ಒಂದು ಡೇಟಾ ಅಂಕವು ಅರ್ಥದಿಂದ ಎಷ್ಟು ಪ್ರಮಾಣಿತ ಅಂಕಗಳ ಅಂತರದಲ್ಲಿದೆ ಎಂಬುದನ್ನು ಲೆಕ್ಕಹಾಕುತ್ತದೆ.

Calculation

ಒಂದು ಡೇಟಾ ಅಂಕದ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಲು:

  1. ಅರ್ಥವನ್ನು ಲೆಕ್ಕಹಾಕಿ (μ\mu):

    ಎಲ್ಲಾ ಡೇಟಾ ಅಂಕಗಳನ್ನು ಸೇರಿಸಿ ಮತ್ತು ಡೇಟಾ ಅಂಕಗಳ ಸಂಖ್ಯೆಯನ್ನು ವಿಭಜಿಸಿ.

    μ=i=1nxin\mu = \frac{\sum_{i=1}^{n} x_i}{n}
  2. ಪ್ರಮಾಣಿತ ಅಂಕವನ್ನು ಲೆಕ್ಕಹಾಕಿ (σ\sigma):

    • ವ್ಯತ್ಯಾಸ (σ2\sigma^2):

      σ2=i=1n(xiμ)2n\sigma^2 = \frac{\sum_{i=1}^{n} (x_i - \mu)^2}{n}
    • ಪ್ರಮಾಣಿತ ಅಂಕ:

      σ=σ2\sigma = \sqrt{\sigma^2}
  3. Z-Score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ:

    z-score ಸೂತ್ರದಲ್ಲಿ ಮೌಲ್ಯಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಿ.

    z=xμσz = \frac{x - \mu}{\sigma}

Edge Cases

  • ಶೂನ್ಯ ಪ್ರಮಾಣಿತ ಅಂಕ (σ=0\sigma = 0):

    ಎಲ್ಲಾ ಡೇಟಾ ಅಂಕಗಳು ಒಂದೇ ರೀತಿಯಾಗಿದ್ದಾಗ, ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುತ್ತದೆ, z-score ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುವುದಿಲ್ಲ ಏಕೆಂದರೆ ನೀವು ಶೂನ್ಯದಿಂದ ವಿಭಜಿಸುವುದಿಲ್ಲ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, z-score ಯ ತತ್ವವು ಅನ್ವಯಿಸುವುದಿಲ್ಲ.

  • ಅರ್ಥಕ್ಕೆ ಸಮಾನವಾದ ಡೇಟಾ ಅಂಕ (x=μx = \mu):

    ಡೇಟಾ ಅಂಕವು ಅರ್ಥಕ್ಕೆ ಸಮಾನವಾದಾಗ, z-score ಶೂನ್ಯವಾಗುತ್ತದೆ, ಇದು ಅದು ಸಂಪೂರ್ಣವಾಗಿ ಸರಾಸರಿ ಎಂಬುದನ್ನು ಸೂಚಿಸುತ್ತದೆ.

  • ಗಣಿತದ ಹೊರಗಿನ ಇನ್ಪುಟ್ಗಳು:

    ಎಲ್ಲಾ ಇನ್ಪುಟ್ಗಳು ಸಂಖ್ಯಾತ್ಮಕವಾಗಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಗಣಿತದ ಹೊರಗಿನ ಇನ್ಪುಟ್ಗಳು ಲೆಕ್ಕಹಾಕುವ ದೋಷಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತವೆ.

Cumulative Probability

z-score ಗೆ ಸಂಬಂಧಿಸಿದ ಸಮೂಹ ಪ್ರಾಯೋಗಿಕತೆ ಒಂದು ಪ್ರಮಾಣಿತ ಸಾಮಾನ್ಯ ವಿತರಣೆಯಲ್ಲಿನ ಯಾದೃಚ್ಛಿಕ ಚರವು ನೀಡಲಾದ ಮೌಲ್ಯಕ್ಕಿಂತ ಕಡಿಮೆ ಅಥವಾ ಸಮಾನವಾಗಿರುವ ಸಂಭವನೀಯತೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಇದು ನಿರ್ದಿಷ್ಟ z-score ಗೆ ಎಡಕ್ಕೆ ಇರುವ ಸಾಮಾನ್ಯ ವಿತರಣಾ ವಕ್ರದ ಅಕೃತಿಯಾಗಿದೆ.

ಗಣಿತವಾಗಿ, ಸಮೂಹ ಪ್ರಾಯೋಗಿಕತೆ PP ಅನ್ನು ಪ್ರಮಾಣಿತ ಸಾಮಾನ್ಯ ವಿತರಣೆಯ ಸಮೂಹ ವಿತರಣಾ ಕಾರ್ಯ (CDF) ಬಳಸಿಕೊಂಡು ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ:

P(Zz)=Φ(z)=12πzet2/2dtP(Z \leq z) = \Phi(z) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{z} e^{-t^2/2} \, dt

ಇಲ್ಲಿ:

  • Φ(z)\Phi(z) = z ನಲ್ಲಿ ಪ್ರಮಾಣಿತ ಸಾಮಾನ್ಯ ವಿತರಣೆಯ CDF

ಸಮೂಹ ಪ್ರಾಯೋಗಿಕತೆ ಸಂಖ್ಯಾಶಾಸ್ತ್ರದಲ್ಲಿ ಒಂದು ನಿರ್ದಿಷ್ಟ ಶ್ರೇಣಿಯ ಒಳಗೆ ಮೌಲ್ಯವು ಸಂಭವಿಸುವ ಸಂಭವನೀಯತೆಯನ್ನು ನಿರ್ಧರಿಸಲು ಮುಖ್ಯವಾಗಿದೆ. ಇದು ಗುಣಮಟ್ಟದ ನಿಯಂತ್ರಣ, ಹಣಕಾಸು ಮತ್ತು ಸಾಮಾಜಿಕ ವಿಜ್ಞಾನಗಳಂತಹ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ವ್ಯಾಪಕವಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ.

SVG Diagram

ಕೆಳಗಿನವು z-score ಮತ್ತು ಪ್ರಮಾಣಿತ ಸಾಮಾನ್ಯ ವಿತರಣಾ ವಕ್ರವನ್ನು ಚಿತ್ರಿಸುವ SVG ಚಿತ್ರಣವಾಗಿದೆ:

μ x z

ಪ್ರಮಾಣಿತ ಸಾಮಾನ್ಯ ವಿತರಣಾ

ಚಿತ್ರ: z-score ಶೇಡಿಂಗ್‌ನೊಂದಿಗೆ ಪ್ರಮಾಣಿತ ಸಾಮಾನ್ಯ ವಿತರಣಾ ವಕ್ರ

ಈ ಚಿತ್ರವು ಮಧ್ಯದಲ್ಲಿ μ\mu ಅನ್ನು ಹೊಂದಿರುವ ಸಾಮಾನ್ಯ ವಿತರಣಾ ವಕ್ರವನ್ನು ತೋರಿಸುತ್ತದೆ. ಶೇಡಿಂಗ್‌ನ ಪ್ರದೇಶವು z-score ಗೆ ಸಂಬಂಧಿಸಿದಂತೆ xx ಡೇಟಾ ಅಂಕದ ಒಳಗೆ ಸಮೂಹ ಪ್ರಾಯೋಗಿಕತೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.

Use Cases

Applications

  • ವಿಭಿನ್ನ ಮಾಪಕಗಳ ನಡುವಿನ ಪ್ರಮಾಣೀಕರಣ:

    z-scores ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ಪ್ರಮಾಣೀಕರಿಸುವ ಮೂಲಕ ವಿಭಿನ್ನ ಮಾಪಕಗಳಿಂದ ಡೇಟಾವನ್ನು ಹೋಲಿಸಲು ಅನುಮತಿಸುತ್ತವೆ.

  • ಹೊರಗೊಮ್ಮಲು ಗುರುತಿಸುವುದು:

    ಅರ್ಥದಿಂದ ಬಹಳ ದೂರ ಇರುವ ಡೇಟಾ ಅಂಕಗಳನ್ನು ಗುರುತಿಸುವುದು (ಉದಾಹರಣೆಗೆ, z-scores -3 ಕ್ಕಿಂತ ಕಡಿಮೆ ಅಥವಾ 3 ಕ್ಕಿಂತ ಹೆಚ್ಚು).

  • ಸಂಖ್ಯಾತ್ಮಕ ಪರೀಕ್ಷೆ:

    z-tests ಸೇರಿದಂತೆ ಹಿಪೋಥೆಸಿಸ್ ಪರೀಕ್ಷೆಯಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ, ಇದು ಒಂದು ಮಾದರಿ ಅರ್ಥವು ತಿಳಿದ ಜನಸಂಖ್ಯೆಯ ಅರ್ಥದಿಂದ ಪ್ರಮುಖವಾಗಿ ವಿಭಜಿತವಾಗಿದೆ ಎಂದು ನಿರ್ಧರಿಸಲು.

  • ಗುಣಮಟ್ಟದ ನಿಯಂತ್ರಣ:

    ಉತ್ಪಾದನೆಯಲ್ಲಿ, z-scores ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ನಿರೀಕ್ಷಿತ ಮಿತಿಗಳ ಒಳಗೆ ಉಳಿಯುವುದನ್ನು ಖಚಿತಪಡಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ.

  • ಹಣಕಾಸು ಮತ್ತು ಹೂಡಿಕೆ:

    ಮಾರುಕಟ್ಟೆಯ ಸಾಮಾನ್ಯ ಕಾರ್ಯಕ್ಷಮತೆಯ ಹೋಲನೆಯ ಮೂಲಕ ಶೇರ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಅಂದಾಜಿಸಲು.

Alternatives

  • T-Score:

    z-score ಗೆ ಹೋಲಿಸುವುದು ಆದರೆ ಮಾದರಿ ಗಾತ್ರ ಚಿಕ್ಕವಾಗಿರುವಾಗ ಮತ್ತು ಜನಸಂಖ್ಯೆಯ ಪ್ರಮಾಣಿತ ಅಂಕ ತಿಳಿದಿಲ್ಲದಾಗ ಬಳಸಲಾಗುತ್ತದೆ.

  • ಶೇಸ್ರೇಣಿಯ ಶ್ರೇಣಿಯು:

    z-scores ಅನ್ನು ಪ್ರಮಾಣೀಕರಿಸುವುದಿಲ್ಲದೆ ಕಚ್ಚಾ ಪ್ರಮಾಣಿತ ಅಂಕದ ಮೌಲ್ಯಗಳನ್ನು ಬಳಸುವುದು.

History

z-score ಯ ತತ್ವವು 19ನೇ ಶತಮಾನದ ಆರಂಭದಲ್ಲಿ ಕಾರ್ಲ್ ಫ್ರಿಡ್ರಿಕ್ ಗಾಸ್ ಅವರ ಸಾಮಾನ್ಯ ವಿತರಣೆಯ ಕಾರ್ಯದಿಂದ ಉತ್ಖಾತವಾಗಿದೆ. z-scores ಗೆ ಮೂಲಭೂತವಾದ ಪ್ರಮಾಣಿತ ಸಾಮಾನ್ಯ ವಿತರಣೆಯನ್ನು ಅಬ್ರಹಾಮ್ ಡೆ ಮೋವ್ರ್ ಮತ್ತು ಪಿಯರ್-ಸಿಮಾನ್ ಲಾಪ್ಲಾಸ್ ಅವರಂತಹ ಸಂಖ್ಯಾತ್ಮಕ ತಜ್ಞರು ಮುಂದುವರಿಸಿದರು. 20ನೇ ಶತಮಾನದ ಸಂಖ್ಯಾಶಾಸ್ತ್ರದ ವಿಧಾನಗಳ ಪ್ರಗತಿಯೊಂದಿಗೆ z-scores ಬಳಸುವಿಕೆ ವ್ಯಾಪಕವಾಗಿ ಪ್ರಸಾರಗೊಂಡಿತು, ವಿಶೇಷವಾಗಿ ಮಾನಸಿಕ ಪರೀಕ್ಷೆ ಮತ್ತು ಗುಣಮಟ್ಟದ ನಿಯಂತ್ರಣದಲ್ಲಿ.

Examples

Excel

## Excel ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
## A2 ಸೆಲ್ಲಿನಲ್ಲಿ ಡೇಟಾ ಅಂಕ, B2 ಸೆಲ್ಲಿನಲ್ಲಿ ಅರ್ಥ, C2 ಸೆಲ್ಲಿನಲ್ಲಿ ಪ್ರಮಾಣಿತ ಅಂಕ
=(A2 - B2) / C2

R

## R ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
calculate_z_score <- function(x, mean, sd) {
  if (sd == 0) {
    stop("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.")
  }
  z <- (x - mean) / sd
  return(z)
}

## ಉದಾಹರಣೆಯ ಬಳಕೆ:
x <- 85
mu <- 75
sigma <- 5
z_score <- calculate_z_score(x, mu, sigma)
print(paste("Z-score:", z_score))

MATLAB

% MATLAB ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
function z = calculate_z_score(x, mu, sigma)
    if sigma == 0
        error('ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.');
    end
    z = (x - mu) / sigma;
end

% ಉದಾಹರಣೆಯ ಬಳಕೆ:
x = 90;
mu = 80;
sigma = 8;
z = calculate_z_score(x, mu, sigma);
fprintf('Z-score: %.2f\n', z);

JavaScript

// JavaScript ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
function calculateZScore(x, mu, sigma) {
  if (sigma === 0) {
    throw new Error('ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.');
  }
  return (x - mu) / sigma;
}

// ಉದಾಹರಣೆಯ ಬಳಕೆ:
const x = 100;
const mu = 85;
const sigma = 7;
try {
  const z = calculateZScore(x, mu, sigma);
  console.log(`Z-score: ${z.toFixed(2)}`);
} catch (error) {
  console.error(error.message);
}

Python

## Python ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
def calculate_z_score(x, mu, sigma):
    if sigma == 0:
        raise ValueError("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.")
    return (x - mu) / sigma

## ಉದಾಹರಣೆಯ ಬಳಕೆ:
x = 95
mu = 88
sigma = 4
try:
    z = calculate_z_score(x, mu, sigma)
    print("Z-score:", round(z, 2))
except ValueError as e:
    print(e)

Java

// Java ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
public class ZScoreCalculator {
    public static double calculateZScore(double x, double mu, double sigma) {
        if (sigma == 0) {
            throw new IllegalArgumentException("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.");
        }
        return (x - mu) / sigma;
    }

    public static void main(String[] args) {
        double x = 110;
        double mu = 100;
        double sigma = 5;

        try {
            double z = calculateZScore(x, mu, sigma);
            System.out.printf("Z-score: %.2f%n", z);
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }
    }
}

C/C++

// C++ ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
#include <iostream>
#include <stdexcept>

double calculate_z_score(double x, double mu, double sigma) {
    if (sigma == 0) {
        throw std::invalid_argument("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.");
    }
    return (x - mu) / sigma;
}

int main() {
    double x = 130;
    double mu = 120;
    double sigma = 10;

    try {
        double z = calculate_z_score(x, mu, sigma);
        std::cout << "Z-score: " << z << std::endl;
    } catch (const std::exception &e) {
        std::cerr << e.what() << std::endl;
    }

    return 0;
}

Ruby

## Ruby ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
def calculate_z_score(x, mu, sigma)
  raise ArgumentError, "ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ." if sigma == 0
  (x - mu) / sigma
end

## ಉದಾಹರಣೆಯ ಬಳಕೆ:
x = 105
mu = 100
sigma = 5
begin
  z = calculate_z_score(x, mu, sigma)
  puts "Z-score: #{z.round(2)}"
rescue ArgumentError => e
  puts e.message
end

PHP

<?php
// PHP ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
function calculate_z_score($x, $mu, $sigma) {
  if ($sigma == 0) {
    throw new Exception("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.");
  }
  return ($x - $mu) / $sigma;
}

// ಉದಾಹರಣೆಯ ಬಳಕೆ:
$x = 115;
$mu = 110;
$sigma = 5;

try {
  $z = calculate_z_score($x, $mu, $sigma);
  echo "Z-score: " . round($z, 2);
} catch (Exception $e) {
  echo $e->getMessage();
}
?>

Rust

// Rust ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
fn calculate_z_score(x: f64, mu: f64, sigma: f64) -> Result<f64, String> {
    if sigma == 0.0 {
        return Err("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.".to_string());
    }
    Ok((x - mu) / sigma)
}

fn main() {
    let x = 125.0;
    let mu = 115.0;
    let sigma = 5.0;

    match calculate_z_score(x, mu, sigma) {
        Ok(z) => println!("Z-score: {:.2}", z),
        Err(e) => println!("{}", e),
    }
}

C#

// C# ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
using System;

public class ZScoreCalculator
{
    public static double CalculateZScore(double x, double mu, double sigma)
    {
        if (sigma == 0)
            throw new ArgumentException("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.");
        return (x - mu) / sigma;
    }

    public static void Main()
    {
        double x = 135;
        double mu = 125;
        double sigma = 5;

        try
        {
            double z = CalculateZScore(x, mu, sigma);
            Console.WriteLine($"Z-score: {z:F2}");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e.Message);
        }
    }
}

Go

// Go ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
package main

import (
    "errors"
    "fmt"
)

func calculateZScore(x, mu, sigma float64) (float64, error) {
    if sigma == 0 {
        return 0, errors.New("ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ")
    }
    return (x - mu) / sigma, nil
}

func main() {
    x := 140.0
    mu := 130.0
    sigma := 5.0

    z, err := calculateZScore(x, mu, sigma)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("Z-score: %.2f\n", z)
    }
}

Swift

// Swift ನಲ್ಲಿ z-score ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ
func calculateZScore(x: Double, mu: Double, sigma: Double) throws -> Double {
    if sigma == 0 {
        throw NSError(domain: "ಪ್ರಮಾಣಿತ ಅಂಕ ಶೂನ್ಯವಾಗುವುದಿಲ್ಲ.", code: 1, userInfo: nil)
    }
    return (x - mu) / sigma
}

// ಉದಾಹರಣೆಯ ಬಳಕೆ:
let x = 120.0
let mu = 110.0
let sigma = 5.0

do {
    let z = try calculateZScore(x: x, mu: mu, sigma: sigma)
    print("Z-score: \(String(format: "%.2f", z))")
} catch let error as NSError {
    print(error.domain)
}
Loading related tools...
Feedback