স্ট্যাকওভারফ্লো খ্যাতি বিতরণে গিনি সূচক গণনা করার চেষ্টা করছেন?


11

আমি এসও ডেটা এক্সপ্লোরার ব্যবহার করে এসও খ্যাতি বিতরণে গিনি সূচকটি গণনা করার চেষ্টা করছি। আমি যে সমীকরণটি প্রয়োগ করতে চাইছি তা হ'ল: কোথায়: = সাইটে ব্যবহারকারী সংখ্যা; = ব্যবহারকারী সিরিয়াল আইডি (1 - 1,225,000); = ব্যবহারকারীর খ্যাতি ।

G(S)=1n1(n+12(i=1n(n+1i)yii=1nyi))
niyii

এইভাবেই আমি এটি প্রয়োগ করেছি ( এখান থেকে অনুলিপি করা ):

DECLARE @numUsers int
SELECT @numUsers = COUNT(*) FROM Users
DECLARE @totalRep float
SELECT @totalRep = SUM(Users.Reputation) FROM Users
DECLARE @giniNominator float
SELECT @giniNominator = SUM( (@numUsers + 1 - CAST(Users.Id as Float)) * 
                              CAST(Users.Reputation as Float)) FROM Users
DECLARE @giniCalc float
SELECT @giniCalc = (@numUsers + 1 - 2*(@giniNominator / @totalRep)) / @numUsers
SELECT @giniCalc

আমার ফলাফলটি (বর্তমানে) -০.৫৩, তবে এটি কোনও অর্থবহ নয়: আমি নিশ্চিত না যে এটি কীভাবে নেতিবাচক হয়ে উঠতে পারে, এমনকি এ্যাবস ভ্যালুতেও আমি অসাম্যটি ১ এর কাছাকাছি হওয়ার আশা করতাম, খ্যাতি কতটা দেওয়া যায় আপনার কাছে এটি যত বাড়বে।

আমি কি অজান্তে খ্যাতি / ব্যবহারকারীদের বিতরণ সম্পর্কে কিছু ধারণা অবহেলা করছি?

আমি কি ভুল করব?


আপনি ঠিক বলেছেন, তবে আমি নিশ্চিত নই যে এটি কেন গণনার উপর প্রভাব ফেলবে?
ইয়োসালে

3
আমি অনুমান করছি যে আপনার প্রশ্নটি গিনি সূচকের প্রকৃতি এবং গণনা সম্পর্কে, এবং এসকিউএল-এ কীভাবে এটি প্রয়োগ করতে হবে তা সম্পর্কে নয় (আমাকে ভুল করে থাকলে আমাকে সংশোধন করুন)। যদি দ্বিতীয়টি হয় তবে আমাদের এটিকে এসওতে স্থানান্তর করা উচিত। ডাব্লু / আমার অনুমান অব্যাহত রেখে, আমি আপনার কোডটি এসই ডেটা সাইট থেকে অনুলিপি করেছি, তবে আপনি যদি এসকিউএল ভাল না পড়েন তাদের জন্য সিউডো কোডেও এটি আবার লিখতে পারেন তবে এটি সাহায্য করবে।
গুং - মনিকা পুনরায়

@ গুং ধন্যবাদ - আমি গণনা সম্পর্কে জিজ্ঞাসা করি, এসকিউএল বাস্তবায়ন নয়। আমি এটি ছদ্ম কোডে আবার লিখব
yossale

উত্তর:


1

আপনি কীভাবে এসকিউএল দিয়ে এটি গণনা করতে পারেন তা এখানে:

with balances as (
    select '2018-01-01' as date, balance
    from unnest([1,2,3,4,5]) as balance -- Gini coef: 0.2666666666666667
    union all
    select '2018-01-02' as date, balance
    from unnest([3,3,3,3]) as balance -- Gini coef: 0.0
    union all
    select '2018-01-03' as date, balance
    from unnest([4,5,1,8,6,45,67,1,4,11]) as balance -- Gini coef: 0.625
),
ranked_balances as (
    select date, balance, row_number() over (partition by date order by balance desc) as rank
    from balances
)
SELECT date, 
    -- (1 − 2B) https://en.wikipedia.org/wiki/Gini_coefficient
    1 - 2 * sum((balance * (rank - 1) + balance / 2)) / count(*) / sum(balance) AS gini
FROM ranked_balances
GROUP BY date
ORDER BY date ASC
-- verify here http://shlegeris.com/gini

ব্যাখ্যা এখানে রয়েছে https://medium.com/@medvedev1088/calculating-gini-coe وړ-in-bigquery- 3bc162c82168


12

আমি SQLকোডটি খুব সহজেই পড়তে পারি না , তবে যদি এটি সাহায্য করে, আমি যদি গিনি সহগের হিসাব করতে যাই, তবে এটিই আমি করতাম (সরল ইংরেজী ভাষায়)।

  1. জিনিসটা এর (অর্থাত। তাই প্রতিনিধির সঙ্গে মানুষের সংখ্যা)এক্সnx
  2. সর্বনিম্ন থেকে সর্বোচ্চে বাছাই করুনx
  3. র‌্যাঙ্কে প্রতিটি ক্রমের ক্রম অনুসারে প্রতিটি যোগ করুন (উদাহরণস্বরূপ যদি সেখানে 10 জন থাকে তবে সর্বনিম্ন প্রতিনিধিত্বকারী ব্যক্তির জন্য প্রতিনিধি 1 দ্বারা গুণিত হয় এবং সর্বোচ্চ প্রতিনিধি সহ ব্যক্তির প্রতিনিধি 10 দ্বারা গুণিত হয়)x
  4. সেই মানটি ধরুন এবং এটি এর যোগফল এবং এর যোগফল (যেমন। ) এর মাধ্যমে ভাগ করুন এবং তারপরে ফলাফলটি 2 দিয়ে গুণ করুনx n × nxn×
  5. ফলাফলটি নিন এবং এটি থেকে এর মান বিয়োগ করুন ।1(1/n)
  6. ভাল খবর!

গিনি সহগের গণনা করার জন্য আমি Rফাংশনে ( আনক প্যাকেজে) উল্লেখযোগ্যভাবে সোজা-ফরওয়ার্ড কোড থেকে এই পদক্ষেপগুলি নিয়েছি । রেকর্ডের জন্য, এখানে কোডটি রয়েছে:

> ineq::Gini
function (x) 
{
    n <- length(x)
    x <- sort(x)
    G <- sum(x * 1:n)
    G <- 2 * G/(n * sum(x))
    G - 1 - (1/n)
}
<environment: namespace:ineq>

এটি আপনার SQLকোডের সাথে কিছুটা সাদৃশ্যপূর্ণ তবে আমি বলেছিলাম, আমি খুব সহজেই এটি খুব সহজে পড়তে পারি না!


আপনাকে ধন্যবাদ খুব অনেক! আমি বাছাই অংশ মিস! এটি অনেক কিছু ব্যাখ্যা করে ...
ইয়োসালে

সুপার. আমি মানটি কী তা জানতে আগ্রহী তাই আপনি যখন গণনাটি করেছেন তখন সম্ভবত কোনও মন্তব্য করুন!
স্মিলিগ

ঠিক আছে, যখন আমি মানগুলি একত্রিত করি (যেমন যদি 1,3, বা 5 পয়েন্ট সহ 10 জন লোক থাকে, তবে আমার মাত্র 3 টি র‌্যাঙ্ক থাকে: 1: 3,2: 5,3: 10) এবং বহুগুণ (কতটি সেই স্কোর সহ) * স্কোর * (স্কোরের র‌্যাঙ্ক) পেয়েছি -০.৯৮, যা ভুল চিহ্নের জন্য না থাকলে বোধগম্য হত। তবে আমি নিশ্চিত না যে কীভাবে আমার ছোট শর্টকাটটি
জিনির

আপনি কি গড় স্কোর বরাদ্দ করতে হবে না? অর্থাত্ 1: 3 এর জন্য প্রয়োগ করুন , 2: 5 এর জন্য ? নাকি আপনি তা করেছেন? 4 × 3.53×24×3.5
Björn

4

আমি বিশ্বাস করি, গিনি সূচকের চারটি সমতুল্য সূত্র রয়েছে। আমার কাছে সর্বাধিক প্রাকৃতিক একটি হ'ল একটি ইউ-স্ট্যাটিস্টিক: যেখানে এর অর্থ হয় । আপনি এই সূত্রটি দিয়ে আপনার গণনাগুলি ডাবল-চেক করতে পারেন। স্পষ্টতই, ফলাফলটি অবশ্যই অ-নেতিবাচক হতে হবে। গিনি সূচক সম্পর্কে আমি যা জানি, তার জন্য সিভিতে খ্যাতি বিতরণে গিনি সূচকটি 0.9 এর উপরে থাকতে হবে; যদি 0.98 অনেক কিছু বোঝায় বা না করে তবে আমি তা বলতে পারি না।x

G=2μn(n1)ij|xixj|
μx

1

সরবরাহিত সমীকরণের উপর ভিত্তি করে @ সিলিগ উত্তরটিতে যুক্ত করা:

SELECT something AS x into #t FROM sometable
SELECT *,ROW_NUMBER() OVER(ORDER BY x) AS i INTO #tt FROM #t
SELECT 2.0*SUM(x*i)/(COUNT(x)*SUM(x))-1.0-(1.0/COUNT(x)) AS gini FROM #tt

আমার পরীক্ষার সেটটিতে আমাকে দিয়েছেন:

0,45503253636587840

কোনটি আর এর অবিক লাইব্রেরি গিনি (এক্স) এর সমান


; AS (# নির্বাচন থেকে কাস্টম (ফ্ল্যাট হিসাবে আয়)) হিসাবে, tt AS (নির্বাচন করুন *, ROW_NUMBER () এক্স এর মাধ্যমে অর্ডার (এক্স দ্বারা অর্ডার)) নির্বাচন করুন 2.0 * সুম (এক্স * আমি) / ( COUNT (এক্স) * সুম (এক্স)) - 1.0- (1.0 / COUNT (এক্স)) থেকে জিএনটি থেকে
ক্রিস করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.