Интеллектуальный анализ данных: как мне найти функциональную форму?


34

Мне любопытно , повторяемых процедур , которые могут быть использованы , чтобы обнаружить функциональную форму функции , y = f(A, B, C) + error_termгде мой единственный вход множество наблюдений ( y, A, Bи C). Обратите внимание, что функциональная форма fнеизвестна.

Рассмотрим следующий набор данных:

AA BB CC DD EE FF
== == == == == ==
98 11 66 84 67 10500
71 44 48 12 47 7250
54 28 90 73 95 5463
34 95 15 45 75 2581
56 37 0 79 43 3221
68 79 1 65 9 4721
53 2 90 10 18 3095
38 75 41 97 40 4558
29 99 46 28 96 5336
22 63 27 43 4 2196
4 5 89 78 39 492
10 28 39 59 64 1178
11 59 56 25 5 3418
10 4 79 98 24 431
86 36 84 14 67 10526
80 46 29 96 7 7793
67 71 12 43 3 5411
14 63 2 9 52 368
99 62 56 81 26 13334
56 4 72 65 33 3495
51 40 62 11 52 5178
29 77 80 2 54 7001
42 32 4 17 72 1926
44 45 30 25 5 3360
6 3 65 16 87 288

В этом примере предположим, что мы это знаем FF = f(AA, BB, CC, DD, EE) + error term, но не уверены в функциональной форме f(...).

Какие процедуры / какие методы вы бы использовали, чтобы найти функциональную форму f(...)?

(Бонус: каково ваше лучшее предположение при определении fприведенных выше данных? :-) И да, есть «правильный» ответ, который даст R^2более 0,99.)


1
@OP: комментарии IrishStat, приведенные ниже, напоминают мне, что без каких-либо знаний о том, как ваши независимые переменные связаны друг с другом и / или зависимой переменной, теоретически оставляет вас «без дела». Например, если бы FFбыл «выход сгорания» и AAбыло количество топлива, и BBбыло количество кислорода, вы бы искали взаимодействующий термин AAиBB
Пит

@ Пит: Взаимодействующие условия абсолютно возможны. Надеюсь, я не исключил этого, неправильно сформулировав свой вопрос.
knorv

2
@ Пит: Это не проблема (и я бы даже назвал это реалистичным в реальной жизни), просто посмотрите мой ответ ниже.
vonjd

3
Пит: Из бесконечного числа функций, которые будут соответствовать данным, R^2 >= 0.99хотелось бы найти ту, которая имеет наилучшее соотношение производительности и сложности (и, конечно, из выборки). Извините за то, что вы не написали эту
простоту

1
Кроме того , теперь , что вопрос достаточно хорошо ответил, что было бы здорово знать , если данные были генерируемый одним из предложенных функций ниже.
naught101

Ответы:


29

Чтобы найти наиболее подходящую функциональную форму (так называемую свободную форму или символическую регрессию) для данных, попробуйте этот инструмент - насколько мне известно, это лучший из доступных (по крайней мере, я очень рад этому) ... и его свободный :-)

http://creativemachines.cornell.edu/eureqa

РЕДАКТИРОВАТЬ : Я дал ему шанс с Eureqa, и я бы пошел на:

с R 2 = 0,99988

AA+AA2+ВВ*СС
р2знак равно0,99988

Я бы назвал это идеальным соответствием (Eureqa предлагает другие, более подходящие решения, но они также немного сложнее. Eureqa одобряет это, поэтому я выбрал это) - и Eureqa сделала все для меня примерно за несколько секунд. нормальный ноутбук ;-)


6
просто для справки, Eureqa использует генетическое программирование, чтобы найти решение проблемы символической регрессии.
Thies Heidecke

10
+1 Впечатляющая производительность для бессмысленного, автоматического инструмента!
whuber

1
@vonjd, ссылка теперь гласит «бесплатная 30-дневная пробная версия». Знаете ли вы о бесплатной альтернативе?
Денис

3
@denis: Вы можете попробовать этот пакет R: cran.r-project.org/web/packages/rgp/index.html - но он не настолько сложен, как вышеупомянутое программное обеспечение (еще нет?)
vonjd

3
Eureqa по-прежнему свободна для академических / некоммерческих организаций
Inverse

25

Один R 2 не является хорошей мерой соответствия, но давайте не будем вдаваться в это здесь, за исключением того, чтоотметим,чтоскупостьценится при моделировании.R2

Для этого обратите внимание, что стандартные методы разведочного анализа данных (EDA) и регрессии (но не пошаговые или другие автоматизированные процедуры) предлагают использовать линейную модель в форме

f=a+bc+abc+constant+error

Используя OLS, это достигает выше 0,99. Воодушевленные таким образом, возникает соблазн квадрат обеих сторон и регресса п на , Ь * с , * б * с , и все их квадраты и изделия. Это сразу производит модельR2fabcabc

f=a2+bc+constant+error

с корневой MSE менее 34 и скорректированный 0,9999R2 . Расчетные коэффициенты 1,0112 и 0,988 предполагают, что данные могут быть искусственно получены с помощью формулы

f=a2+bc+50

плюс немного нормально распределенная ошибка SD примерно равная 50.

редактировать

afaa2bcaa2,,e2,ab,ac,,deb2

b2

Во всяком случае, улучшенная посадка дается

f=a+a2+bcb2/100+30.5+error

with mean residual 0, standard deviation 26.8, all residuals between -50 and +43, and no evidence of non-normality (although with such a small dataset the errors could even be uniformly distributed and one couldn't really tell the difference). The reduction in residual standard deviation from around 50 to around 25 would often be expressed as "explaining 75% of the residual variance."


I make no claim that this is the formula used to generate the data. The residuals are large enough to allow some fairly large changes in a few of the coefficients. For instance, 95% CIs for the coefficients of a, b2, and the constant are [-0.4, 2.7], [-0.013, -0.003], and [-7, 61] respectively. The point is that if any random error has actually been introduced in the data-generation procedure (and that is true of all real-world data), that would preclude definitive identification of the coefficients (and even of all the variables that might be involved). That's not a limitation of statistical methods: it's just a mathematical fact.

BTW, using robust regression I can fit the model

f=1.0103a2+0.99493bc0.007b2+46.78+error

with residual SD of 27.4 and all residuals between -51 and +47: essentially as good as the previous fit but with one less variable. It is more parsimonious in that sense, but less parsimonious in the sense that I haven't rounded the coefficients to "nice" values. Nevertheless, this is the form I would usually favor in a regression analysis absent any rigorous theories about what kinds of values the coefficients ought to have and which variables ought to be included.

It is likely that additional strong relationships are lurking here, but they would have to be fairly complicated. Incidentally, taking data whose original SD is 3410 and reducing their variation to residuals with an SD of 27 is a 99.99384% reduction in variance (the R2 of this new fit). One would continue looking for additional effects only if the residual SD is too large for the intended purpose. In the absence of any purpose besides second-guessing the OP, it's time to stop.


1
Good work! So far this seems like the best answer.
Zach

@whuber: Nice work -- you're getting close! :-) It is true that the data was artifically generated with a formula plus an error term. But the formula is not exactly the one you've found - you're missing out on a couple of terms. But you're close and you're currently in the lead :-)
knorv

4
@whuber I already gave my +1, but I'd like to add that this is very instructive to read one's approach to such a problem. You're worth the bounty in any manner whatsoever.
chl

1
@bill I did try it, early on. I trust my explanation provides room for your proposal as well as the two I have included. There's more than one right answer. I continued the analysis and included those extra terms because it was clear there are patterns in the residuals and that accounting for them materially reduces the residual variance. (I will confess that I have spent very little time and attention on this, though: the total time for the initial analysis, including writing the answer, was 17 minutes. More time often translates to more insight...)
whuber

1
@naught It would be interesting to begin with such a long formula and apply an Elastic Net (or some similar variable-elimination algorithm). I suspect the success of any such approach would depend on keeping the number of functions relatively small and including the correct functions among them--which sounds more like a matter of good luck and good guessing than of any principled investigation. But if blindly throwing a huge number of functional forms at the problem results in success, that would be worth knowing.
whuber

5

Your question needs refining because the function f is almost certainly not uniquely defined by the sample data. There are many different functions which could generate the same data.

That being said, Analysis of Variance (ANOVA) or a "sensitivity study" can tell you a lot about how your inputs (AA..EE) affect your output (FF).

I just did a quick ANOVA and found a reasonably good model: FF = 101*A + 47*B + 49*C - 4484. The function does not seem to depend on DD or EE linearly. Of course, we could go further with the model and add quadratic and mixture terms. Eventually you will have a perfect model that over-fits the data and has no predictive value. :)


@Pete As you said you could add quadratic,cubic,quartic ....and mixture terms but that would just be just nonsense. There is nonsense and there is non-sensical nonsense bot the most non-sensicle nonsense is "statistical nonsense ".
IrishStat

2
@IrishStat it is not generally nonsense to add mixture and higher order terms; only bad when it is done without restraint and without regard to theory
Pete

2
@Pete . Correct! The absence of a pre-existing theory makes it silly.
IrishStat

@Pete: What R^2 do you get for your model?
knorv

@knorv: I don't quite remember but it was > 0.90. When plotted about the regression line the points appeared to have a little bit of an "S"/cubic shape so I'm guessing the function "f" was a mathematical creation where someone typed 100A + 50(B+C) + higher order terms involving D & E.
Pete

3

Broadly speaking, there's no free lunch in machine learning:

In particular, if algorithm A outperforms algorithm B on some cost functions, then loosely speaking there must exist exactly as many other functions where B outperforms A

/ edit: также радиальный SVM с C = 4 и sigma = 0,206 легко дает R2 0,99. Извлечение фактического уравнения, использованного для получения этого набора данных, оставлено в качестве упражнения для класса. Код находится в R.

setwd("~/wherever")
library('caret')
Data <- read.csv("CV.csv", header=TRUE)
FL <- as.formula("FF ~ AA+BB+CC+DD+EE")
model <- train(FL,data=Data,method='svmRadial',tuneGrid = expand.grid(.C=4,.sigma=0.206))
R2( predict(model, Data), Data$FF)

-2

Все модели неверны, но некоторые полезны: GEPBox

Y (T) = - 4709,7
+ 102,60 * AA (T) - 17,0707 * AA (T-1)
+ 62,4994 * BB (T) + 41,7453 * CC (T) + 965,70 * ZZ (T)

где ZZ (T) = 0 для T = 1,10 = 1 в обратном порядке

По-видимому, существует «запаздывающая связь» между Y и AA и объясненный сдвиг в среднем для наблюдений 11-25.

Любопытные результаты, если это не хронологические или пространственные данные.


@IrishStats Что такое "GEP Box"?
knorv

IrishStat: данные не хронологические. Так что порядок наблюдений не имеет значения. Сдвиг в среднем для наблюдений № 11-25 - это просто побочный эффект от того, как я получил набор данных.
knorv

1
@IrishStat: я имел в виду, что мне довелось получить записи в определенном порядке (подумайте ORDER BY). Строки не имеют особого специального порядка. Так что вы можете смело их переставлять, не теряя никакой информации. Извините, если я вас смутил :-)
knorv

1
IrishStat: набор данных неупорядочен. AA(T-1)Член в вашем уравнении не имеет смысла в этом контексте.
naught101

2
@naught Это правильно. Это означает, что при нахождении любого «значимого» коэффициента для запаздывающей переменной AA(T-1)или любого «среднего сдвига» вводятся ложные переменные: переобучение. Что интересно в этом примере, так это то, что, хотя я склонен думать о переоснащении, которое дает оптимистично (и неправильно) высокийр2значения, в этом случае он произвел огромное увеличение остаточной дисперсии, потому что он также не нашел несколько важных переменных.
whuber

-3

площадь R 97,2

Оценка / Диагностическая проверка для переменной YY
X1 AAS
X2 BB
X3 BBS
X4 CC

Количество невязок (R) = n 25
Число степеней свободы = нм 20
Остаточное среднее = сумма R / n -.141873E-05
Сумма квадратов = сумма R 2 .775723E + 07
Дисперсия = SOS / (n) 310289.
Скорректировано Дисперсия = SOS / (нм) 387861. Среднеквадратическое
отклонение RMSE = SQRT (Adj Var) 622,785
Стандартная ошибка среднего значения = Стандартное Dev / (нм) 139,259
Среднее / его стандартная ошибка = Среднее / SEM-101877E-07 Значение AIC (использует var) = nln + 2m 326,131
Среднее абсолютное отклонение = Сумма (ABS (R)) / n 455,684

Значение SBC (использует var) = nln + m * lnn 332.226
Значение BIC (использует var ) = см. Вэй p153 340,388
R Square = .972211 Статистика
Дурбина-Ватсона = [- A (T -1)] ** 2 / A
2 1.76580

**
МОДЕЛЬ КОМПОНЕНТА LAG COEFF STANDARD PT
# (BOP) ЗНАЧЕНИЕ ОШИБКИ ЗНАЧЕНИЕ

1CONSTANT                         -.381E+04   466.       .0000    -8.18

ВХОДНАЯ СЕРИЯ X1 AAS AA SQUARED

2Omega (input) -Factor #  1    0   .983       .410E-01   .0000    23.98

ВХОДНАЯ СЕРИЯ X2 BB BB В ПОДАРОК

3Omega (input) -Factor #  2    0   108.       14.9       .0000     7.27

ВХОДНАЯ СЕРИЯ X3 BBS BB SQUARED

4Omega (input) -Factor #  3    0  -.577       .147       .0008    -3.93

ВХОДНАЯ СЕРИЯ X4 CC CC В ПОДАРОК

5Omega (input) -Factor #  4    0   49.9       4.67       .0000    10.67

 Остаточный участок

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.