2012-10-17 18 views
5

मैं कुछ कठोर सांख्यिकीय समस्या के साथ कुछ प्रतिभा एसक्यूएल सहायता की तलाश में हूं।एसक्यूएल सांख्यिकीय नमूना

जो मैं करना चाहता हूं वह उपयोगकर्ता प्रोफाइल के असंतुलित समूह से सांख्यिकीय रूप से संतुलित नमूना खींच रहा है। एक समय में एक प्रोफ़ाइल विशेषता (उदा। लिंग) के लिए ऐसा करना कुछ हद तक सरल होगा। लेकिन इसे कई आयामों में एक बार में करने के लिए कुछ परिष्कार की आवश्यकता होती है।

तर्क के लिए, मान लें कि मेरे पास यह तालिका है।

Profile.userID 
Profile.Gender 
Profile.Age 
Profile.Income 

मैं मिश्रण से बाहर प्रोफाइल की एक पूल खींचने के लिए इतना है कि उपयोगकर्ताओं के नए नमूने मोटे तौर पर निम्नलिखित विशेषताएं के सभी मेल खाता चाहते हैं:

50% male, 50% female 
30% young, 40% middle age, 40% old 
40% low income, 40% middle income, 20% high income 

किसी को भी करने के बारे में कैसे किसी भी विचार है इसे खीचें?

+1

क्या आपको नमूना सेट को आपके विनिर्देशों को पूरा करने तक एक बार यादृच्छिक रूप से रिकॉर्ड खींचने से रोकता है? –

+0

मैं इसे लगातार संतुलन से कैसे दूर रखूंगा? कहो मुझे सिर्फ एक और महिला रिकॉर्ड की आवश्यकता है, लेकिन उसको खींचकर मेरी उम्र और आय संतुलन से बाहर हो जाती है ...? – tbacos

+2

30% युवा, 40% मध्यम आयु, 40% पुराना! = 100% क्या आपकी सीमा में युवा और मध्यम आयु वर्ग के बीच एक ओवरलैप है? –

उत्तर

3

आपके पास नमूना समस्या है। वे इस समस्या को हल करने के लिए कुंजी को तीन चर के संयोजन के अलग-अलग समूहों में विभाजित करना है। फिर, प्रत्येक समूह की सीमांत संभावनाओं के उत्पाद की गणना करें (आपके मान मामूली संभावनाएं हैं)। फिर, इन सभी 18 समूहों में सामान्यीकृत करें।

उदाहरण के लिए, नर-यंग-लो समूह को 0.5 * 0.3 * 0.4 = 0.06 का मान मिलेगा। आप इसे सभी 18 समूहों के लिए दोहराते हैं और फिर प्रतिशत को सामान्यीकृत करते हैं (यानी, प्रत्येक मान को सभी मानों के योग से विभाजित करें)।

Gender Age  Income Marg Normalized 
Male Young Low  0.06 5.5% 
Male Young Middle 0.06 5.5% 
Male Young High 0.03 2.7% 
Male Middle Low  0.08 7.3% 
Male Middle Middle 0.08 7.3% 
Male Middle High 0.04 3.6% 
Male Old  Low  0.08 7.3% 
Male Old  Middle 0.08 7.3% 
Male Old  High 0.04 3.6% 
Female Young Low  0.06 5.5% 
Female Young Middle 0.06 5.5% 
Female Young High 0.03 2.7% 
Female Middle Low  0.08 7.3% 
Female Middle Middle 0.08 7.3% 
Female Middle High 0.04 3.6% 
Female Old  Low  0.08 7.3% 
Female Old  Middle 0.08 7.3% 
Female Old  High 0.04 3.6% 

यह तो प्रत्येक समूह के लिए अपने नमूना दर हो जाता है: यहाँ परिणाम है। यहाँ वास्तव में नमूना करने के लिए छद्म एसक्यूएल कोड है:

with SamplingRates (
    select 'Male' as gender, 'Young' as Age, 'Low' as income, 0.045 as SamplingRate, 
    union all . . 
) 
select t.* 
from (select t.*, 
      row_number() over (partition by gender, age, income order by <random>) as seqnum, 
      count(*) over (partition by gender, age, income) as NumRecs 
     from table t 
    ) t join 
    SampleRates sr 
    on t.gender = sr.gender and t.age = sr.age and t.income = sr.income and 
     seqnum <= sr.SamplingRate * NumRecs 
0

यहाँ कैसे मैं इसके बारे में जाना होगा, यह मानते हुए है: 30% युवा, 40% मध्यम आयु, 30% वर्ष

कम से कम आम हरों लेते हुए आपका पूल आकार = 5x5x3x4x2x4 = 2400

आपके पूल को टेम्पलेट तालिका में पॉप्युलेट करने के लिए आपके पास 18 प्रश्न हैं। आपको एक बड़ा पूल देने के लिए सभी 18 प्रश्न दोहराएं। नीचे एक आदर्श पूल का वितरण कैसा दिखता है और प्रत्येक क्वेरी कैसा दिखाई देगी इसका एक विचार है। आप प्रत्येक क्वेरी में कुछ यादृच्छिकता भी पेश कर सकते हैं। ऐसा करने के बारे में पिछली पोस्ट थी।

यह शायद कम सुरुचिपूर्ण है लेकिन फिर भी एक संतुलित पूल पैदा करना चाहिए।

SELECT * INTO TEMP TABLE 
WHERE male, young, high income and ID NOT IN TEMP TABLE 
LIMIT RECORD SET 72 

और इसी तरह और बहुत आगे है:

स्यूडोकोड में आपका पहला प्रश्न कैसा दिखेगा। आशा करता हूँ की ये काम करेगा। हालांकि अच्छा सवाल है।

CREATE TEMP TABLE 
480 high income 
    144 young 
     72 males [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 72] 
     72 females [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 72] 
    192 middle age 
     96 males [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 96] 
     96 females [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 96] 
    144 old 
     72 males [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 72] 
     72 females [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 72] 

960 middle income 
    288 young 
     144 male [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 
     144 female [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 
    384 middle age 
     192 male [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 192] 
     192 female [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 192] 
    288 old 
     144 male [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 
     144 female [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 

960 low income 
    288 young 
     144 male [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 
     144 female [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 
    384 middle age 
     192 male [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 192] 
     192 female [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 192] 
    288 old 
     144 male [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 
     144 female [SELECT THIS INTO TEMP TABLE WHERE ID NOT IN TEMP TABLE LIMIT 144] 
संबंधित मुद्दे