Неправильное значение интерполяции при больших количествах точек

У меня есть датасет с значениями цены биткоина с 01.01.2021 до 01.04.2021 с шагом в один день. Регулярными выражениями обрабатываю данные, чтоб python мог с ними работать.

def data_clean(path):
    crypto = pd.read_csv(path)
    crypto['Цена'] = crypto['Цена'].str.replace(r'\.', '', regex=True).str.replace(r'\,', '.', regex=True)
    crypto['Откр.'] = crypto['Откр.'].str.replace(r'\.', '', regex=True).str.replace(r'\,', '.', regex=True)
    crypto['Макс.'] = crypto['Макс.'].str.replace(r'\.', '', regex=True).str.replace(r'\,', '.', regex=True)
    crypto['Мин.'] = crypto['Мин.'].str.replace(r'\.', '', regex=True).str.replace(r'\,', '.', regex=True)
    crypto['Дата'] = crypto['Дата'].str.replace(r'\.', '-', regex=True)

    crypto['Макс.'] = pd.to_numeric(crypto['Макс.'])
    crypto['Мин.'] = pd.to_numeric(crypto['Мин.'])
    crypto['Цена'] = pd.to_numeric(crypto['Цена'])
    crypto['Откр.'] = pd.to_numeric(crypto['Откр.'])
    return crypto

И записываю данный DataFrame в переменную

btc = data_clean('./btc-data.csv')

Я хочу узнать значение цены биткоина в середине 7 дня. Для этого я использую интерполяционный полином Лагранжа.

def lagranzh(crypto, point):
    answer = 0
    x = [i for i in range(len(crypto['Дата'].tolist()))] #Номер дня(0 - 01.01.2021, 1 - 02.01.2021 и т.д.)
    y = [i for i in crypto['Цена'].tolist()]
    for j in range(len(x)):
        numenator = 1
        denominator = 1
        for i in range(len(x)):
            if i != j:
                numenator *= (point - x[i])
                denominator *= (x[j] - x[i])
        answer += y[j] * numenator / denominator
    return answer

При вызове данных принтов

print(lagranzh(btc, 7))
print(lagranzh(btc, 7.5))
print(lagranzh(btc, 8))

Получаю вот такой результат: введите сюда описание изображения

Методом проб пришел к выводу, что если в функции lagranzh в условиях циклов поставить не len(x), а число < 30, то результат будет близким к верному. Почему из-за большого количества данных интерполяция даёт неправильный результат?

Датасет


Ответы (0 шт):